Форум сайта python.su
Здравствуйте!
Я пока только разбираюсь с ТГ и у меня, наверное, совсем дурацкая проблема: я попыталась сгенерировать классы на основе существующей базы postgres, в файл model.py вписала:
class BBPoP(SQLObject):
class sqlmeta:
fromDatabase = True
File "H:\db4\db4\model.py", line 9, in <module>
class BBPoP(SQLObject):
File "c:\python25\lib\site-packages\SQLObject-0.10.2-py2.5.egg\sqlobject\declarative.py", line 92, in __new__
cls.__classinit__(cls, new_attrs)
File "c:\python25\lib\site-packages\SQLObject-0.10.2-py2.5.egg\sqlobject\main.py", line 791, in __classinit__
cls.sqlmeta.addColumnsFromDatabase()
File "c:\python25\lib\site-packages\SQLObject-0.10.2-py2.5.egg\sqlobject\main.py", line 447, in addColumnsFromDatabase
for columnDef in conn.columnsFromSchema(sqlmeta.table, soClass):
File "c:\python25\lib\site-packages\SQLObject-0.10.2-py2.5.egg\sqlobject\postgres\pgconnection.py", line 212, in columnsFromSchema
keyData = self.queryAll(keyQuery % self.sqlrepr(tableName))
File "c:\python25\lib\site-packages\SQLObject-0.10.2-py2.5.egg\sqlobject\dbconnection.py", line 686, in queryAll
return self._dbConnection._queryAll(self._connection, s)
File "c:\python25\lib\site-packages\SQLObject-0.10.2-py2.5.egg\sqlobject\dbconnection.py", line 343, in _queryAll
self._executeRetry(conn, c, s)
File "c:\python25\lib\site-packages\SQLObject-0.10.2-py2.5.egg\sqlobject\dbconnection.py", line 329, in _executeRetry
return cursor.execute(query)
ProgrammingError: FEHLER: Relation »bb_po_p« existiert nicht
Офлайн
class BBPoP(SQLObject):
class sqlmeta:
fromDatabase = True
table = 'bb_pop'
Офлайн
Спасибо!
Действительно, логично :-)
Но дальше все равно непонятно:
class BBPoP(SQLObject):
class sqlmeta:
fromDatabase = True
table = 'parameter.bb_pop'
idName = 'parameter.bb_pop.id_bbpop' # или ' id_bbpop'
Офлайн
Какого типа поле id_bbpop? Перечитайте внимательно еще раз вот этот раздел Legacy Database Schemas
Отредактировано (Окт. 8, 2008 11:44:50)
Офлайн
у поля id_bbpop тип INT, в базе оно объявлено как SERIAL PRIMARY KEY.
UPD:
Короче говоря, я сдалась. Оказалось, это довольно старый малоизвестный баг, который не дает склобжекту корректно работать с user-defined schemas. Буду изыскивать другие инструменты.
Спасибо большое за помощь!
Отредактировано (Окт. 8, 2008 12:38:19)
Офлайн
hildiНе приходилось работать через sqlobject с унаследованными базами. Ради интереса дайте ссылочку на баг.
Оказалось, это довольно старый малоизвестный баг, который не дает склобжекту корректно работать с user-defined schemas. Буду изыскивать другие инструменты.
Офлайн
Я вообще в фреймворках и базах полный ноль. Меня брали на работу только простенький парсер написать, но у шефа вечно семь пятниц на неделе и постоянно какие-то наполеоновские планы, и вот результат :-) Мне, в общем, все равно, пусть будут фреймворки, раз они готовы платить за то, что я большую часть времени читаю на работе мануалы и интернет.
Про баг тут есть, и больше нигде:
http://article.gmane.org/gmane.comp.python.sqlobject/3903
Щаз я тоже перейду на SQLAlchemy и как всем покажу! :-)
Офлайн
hildi, можно версии ТГ, sqlobject и pgsql?
у меня ТГ 1.0.4.4, SQLObject-0.8.2-py2.4.egg и postgresql 8.1 и всё работает без ошибок
class Client(SQLObject):
class sqlmeta:
fromDatabase = True
table = 'client'
Офлайн
У меня все равно не работает (см. выше). Может, это из-за схем, которые не public?
У меня turbogears 1.0.7, а Postgres 8.3.
А то же самое в SQL Alchemy можно просто сделать? Подозреваю, что это делается двумя строчками, знать бы только как :-(
Офлайн
hildiможешь выложить структуру БД?
У меня все равно не работает (см. выше). Может, это из-за схем, которые не public?
Офлайн