Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 7, 2008 17:02:17

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

Здравствуйте!

Я пока только разбираюсь с ТГ и у меня, наверное, совсем дурацкая проблема: я попыталась сгенерировать классы на основе существующей базы 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 ее нет, а на большее у меня фантазии не хватает…

Заранее большое спасибо!



Офлайн

#2 Окт. 8, 2008 05:38:48

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

class BBPoP(SQLObject):
class sqlmeta:
fromDatabase = True
table = 'bb_pop'



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Окт. 8, 2008 10:38:58

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

Спасибо!
Действительно, логично :-)

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

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 тоже почти нигде ничего нет…



Офлайн

#4 Окт. 8, 2008 11:42:59

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

Какого типа поле id_bbpop? Перечитайте внимательно еще раз вот этот раздел Legacy Database Schemas



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Окт. 8, 2008 11:44:50)

Офлайн

#5 Окт. 8, 2008 11:49:55

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

у поля id_bbpop тип INT, в базе оно объявлено как SERIAL PRIMARY KEY.


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

Спасибо большое за помощь!



Отредактировано (Окт. 8, 2008 12:38:19)

Офлайн

#6 Окт. 8, 2008 12:56:13

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

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



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Окт. 8, 2008 13:01:35

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

Я вообще в фреймворках и базах полный ноль. Меня брали на работу только простенький парсер написать, но у шефа вечно семь пятниц на неделе и постоянно какие-то наполеоновские планы, и вот результат :-) Мне, в общем, все равно, пусть будут фреймворки, раз они готовы платить за то, что я большую часть времени читаю на работе мануалы и интернет.

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

Щаз я тоже перейду на SQLAlchemy и как всем покажу! :-)



Офлайн

#8 Окт. 8, 2008 16:46:06

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

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



Офлайн

#9 Окт. 8, 2008 17:13:07

hildi
От:
Зарегистрирован: 2008-10-07
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

У меня все равно не работает (см. выше). Может, это из-за схем, которые не public?

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

А то же самое в SQL Alchemy можно просто сделать? Подозреваю, что это делается двумя строчками, знать бы только как :-(



Офлайн

#10 Окт. 8, 2008 17:18:12

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка в sqlobject при генерации классов для своей схемы в postgresql

hildi
У меня все равно не работает (см. выше). Может, это из-за схем, которые не public?
можешь выложить структуру БД?
хотя бы одной таблицы?
PS TG 1.0.7 не сильно отличается от 1.0.4.4



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version