Найти - Пользователи
Полная версия: Хочу научиться пользоваться ORM
Начало » Python для новичков » Хочу научиться пользоваться ORM
1 2
Suliman
Нашел на Хабре простенькую статейку о 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 правильно указать.
alexsis
class Person(Model):
	name = CharField()
	class Meta:
		database = db
здесь интерпретатор не знает что у вас лежит в db.
Suliman
alexsis, а как правильно все это сделать?
Shaman
У Вас там по ссылке всё есть.
from peewee import *
db = SqliteDatabase('people.db')
class Person(Model):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()
    class Meta:
        database = db  # модель будет использовать базу данных 'people.db'
Suliman
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
Это очень наркоманское решение?
Shaman
Проблема не в провайдере.
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. Скорее всего заведует метаданными, связанными с моделью.
Suliman
В итоге не получается. Оно соединяется с БД, но ничего там создать не может. Как продиагностировать причину не знаю.
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
Следующий код вообще приводит к ошибке:
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'
Поисковик не подсказывает что не так…
Shaman
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.
alexsis
SQLAlchemy вроде как с Firebird дружит.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB