Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 23, 2014 15:54:40

Suliman
Зарегистрирован: 2013-06-18
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

Нашел на Хабре простенькую статейку о ORM http://habrahabr.ru/post/207110/
Пытаюсь используя ORM подключитьсяк БД (FireBird) и научиться с ней работать.

Реквизиты доступа правильные (тут они не указаны). Вот сам код:

from peewee import *
import fdb
import gvar
class Person(Model):
	name = CharField()
	class Meta:
		database = db
def checkfdbconnection():
	try:
		db = fdb.connect(dsn=gvar.dbhost, user=gvar.dbuser, password=gvar.dbpass)
		print "Connected to FireBird DB"
		try:
			Person.create_table() # Вот тут вроде как таблицу создаем
		except:
			print "Can't create DB"
	except:
		print "[ERROR] \t Could not connect ro FireBird DB"
checkfdbconnection()

Однако указанный код ругается, что:
NameError: name ‘db’ is not defined

По идее же в начале мы создаем класс и только потом его используем. Пробовал переносить вниз – тоже самое. Приложение не видит db и я не могу понять как его это самое db правильно указать.

Офлайн

#2 Апрель 23, 2014 20:28:59

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

class Person(Model):
	name = CharField()
	class Meta:
		database = db
здесь интерпретатор не знает что у вас лежит в db.

Офлайн

#3 Апрель 24, 2014 09:04:51

Suliman
Зарегистрирован: 2013-06-18
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

alexsis, а как правильно все это сделать?

Офлайн

#4 Апрель 24, 2014 09:09:58

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

У Вас там по ссылке всё есть.

from peewee import *
db = SqliteDatabase('people.db')
class Person(Model):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()
    class Meta:
        database = db  # модель будет использовать базу данных 'people.db'

Офлайн

#5 Апрель 24, 2014 12:41:11

Suliman
Зарегистрирован: 2013-06-18
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

Shaman, я не могу понять, как мне использовать провайдер именно моей БД? Тут же sqllite, а у меня Firebird.

Я тут пытаюсь сделать что-то в духе:

db = fdb.connect(dsn=gvar.dbhost, user=gvar.dbuser, password=gvar.dbpass)
class Person(Model):
	name = CharField()
	class Meta:
	 	database = db
per = Person()
per.create_table
Это очень наркоманское решение?

Отредактировано Suliman (Апрель 24, 2014 13:30:58)

Офлайн

#6 Апрель 24, 2014 13:18:18

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

Проблема не в провайдере.

from peewee import *
import fdb
import gvar
db = None
class Person(Model):
	name = CharField()
	class Meta:
		database = db
def checkfdbconnection():
        global db
	try:
		db = fdb.connect(dsn=gvar.dbhost, user=gvar.dbuser, password=gvar.dbpass)
		print "Connected to FireBird DB"
		try:
			Person.create_table() # Вот тут вроде как таблицу создаем
		except:
			print "Can't create DB"
	except:
		print "[ERROR] \t Could not connect ro FireBird DB"
checkfdbconnection()
Библиотеку peewee на знаю, так что без понятия что именно делает Meta. Скорее всего заведует метаданными, связанными с моделью.

Офлайн

#7 Апрель 24, 2014 13:56:54

Suliman
Зарегистрирован: 2013-06-18
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

В итоге не получается. Оно соединяется с БД, но ничего там создать не может. Как продиагностировать причину не знаю.

from peewee import *
import fdb
import gvar
db = None
class Person(Model):
	name = CharField()
	class Meta:
	 	database = db
def checkfdbconnection():
	global db
	try:
		db = fdb.connect(dsn=gvar.dbhost, user=gvar.dbuser, password=gvar.dbpass)
		print "Connected to FireBird DB"
		try:
			Person.create_table() # 
		except:
			print "Can't create DB"
	except:
		print "[ERROR] \t Could not connect ro FireBird DB"
checkfdbconnection()
Вообще какую ORM посоветуете использовать? ORM как-то завязана на тип БД? Мне только Firebird подходит…

Отредактировано Suliman (Апрель 24, 2014 14:12:07)

Офлайн

#8 Апрель 24, 2014 15:07:43

Suliman
Зарегистрирован: 2013-06-18
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

Следующий код вообще приводит к ошибке:

db = fdb.connect(dsn=gvar.dbhost, user=gvar.dbuser, password=gvar.dbpass)
class Person(Model):
	name = CharField()
	class Meta:
	 	database = db
Person.create_table()

D:\Project\2014\archproject>test.py
Traceback (most recent call last):
File "D:\Project\2014\archproject\test.py", line 11, in <module>
Person.create_table()
File "C:\Python27\ArcGIS10.2\lib\site-packages\peewee.py", line 2999, in creat
e_table
if db.sequences and pk.sequence:
AttributeError: 'Connection' object has no attribute 'sequences'
Поисковик не подсказывает что не так…

Офлайн

#9 Апрель 24, 2014 15:34:00

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

http://peewee.readthedocs.org/en/latest/peewee/database.html

The Database encapsulates functionality specific to a given db driver. For example difference in column types across database engines, or support for certain features like sequences.

Офлайн

#10 Апрель 24, 2014 15:34:58

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

Хочу научиться пользоваться ORM

SQLAlchemy вроде как с Firebird дружит.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version