Найти - Пользователи
Полная версия: ошибка в sqlobject при генерации классов для своей схемы в postgresql
Начало » Pyramid / Pylons / TurboGears » ошибка в sqlobject при генерации классов для своей схемы в postgresql
1 2 3
hildi
Здравствуйте!

Я пока только разбираюсь с ТГ и у меня, наверное, совсем дурацкая проблема: я попыталась сгенерировать классы на основе существующей базы postgres, в файл model.py вписала:

class BBPoP(SQLObject):
class sqlmeta:
fromDatabase = True
загрузила admin toolbox, и при попытке зайти в model designer мне выдало длинный лог ошибок. Последние неск. строк:

  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
В смысле, рилейшн »bb_po_p« не найден.
В этом рилейшне явно опечатка - правильно должно быть »bb_pop«.

А теперь, собсно, вопрос: можно как-то определить, где эту опечатку искать? В файле model.py ее нет, а на большее у меня фантазии не хватает…

Заранее большое спасибо!
PooH
class BBPoP(SQLObject):
class sqlmeta:
fromDatabase = True
table = 'bb_pop'
hildi
Спасибо!
Действительно, логично :-)

Но дальше все равно непонятно:

class BBPoP(SQLObject):
class sqlmeta:
fromDatabase = True
table = 'parameter.bb_pop'
idName = 'parameter.bb_pop.id_bbpop' # или ' id_bbpop'
Почему-то ругается на отсутствие в таблице primary key, хотя в базе колонка ‘ id_bbpop’ указана как primary key.
От отчаяния даже переименовала ее в просто ‘id’, но это тоже не сработало.

Вообще есть где-нить women-friendly мануалы, чтобы почитать про turbogears+sqlobject+postgres? Можно на английском. Оф. дока sqlobject не помогла, про TG тоже почти нигде ничего нет…
PooH
Какого типа поле id_bbpop? Перечитайте внимательно еще раз вот этот раздел Legacy Database Schemas
hildi
у поля id_bbpop тип INT, в базе оно объявлено как SERIAL PRIMARY KEY.


UPD:
Короче говоря, я сдалась. Оказалось, это довольно старый малоизвестный баг, который не дает склобжекту корректно работать с user-defined schemas. Буду изыскивать другие инструменты.

Спасибо большое за помощь!
PooH
hildi
Оказалось, это довольно старый малоизвестный баг, который не дает склобжекту корректно работать с user-defined schemas. Буду изыскивать другие инструменты.
Не приходилось работать через sqlobject с унаследованными базами. Ради интереса дайте ссылочку на баг.
ЗЫ: Перешел на SQLAlchemy и не жалею ;)
hildi
Я вообще в фреймворках и базах полный ноль. Меня брали на работу только простенький парсер написать, но у шефа вечно семь пятниц на неделе и постоянно какие-то наполеоновские планы, и вот результат :-) Мне, в общем, все равно, пусть будут фреймворки, раз они готовы платить за то, что я большую часть времени читаю на работе мануалы и интернет.

Про баг тут есть, и больше нигде:
http://article.gmane.org/gmane.comp.python.sqlobject/3903

Щаз я тоже перейду на SQLAlchemy и как всем покажу! :-)
pythonwin
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'
PS это в своё время также было проверено на MS SQL
hildi
У меня все равно не работает (см. выше). Может, это из-за схем, которые не public?

У меня turbogears 1.0.7, а Postgres 8.3.

А то же самое в SQL Alchemy можно просто сделать? Подозреваю, что это делается двумя строчками, знать бы только как :-(
pythonwin
hildi
У меня все равно не работает (см. выше). Может, это из-за схем, которые не public?
можешь выложить структуру БД?
хотя бы одной таблицы?
PS TG 1.0.7 не сильно отличается от 1.0.4.4
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