Найти - Пользователи
Полная версия: TG+SA: connection pool и экспорт в excel - как сделать "красиво"?
Начало » Pyramid / Pylons / TurboGears » TG+SA: connection pool и экспорт в excel - как сделать "красиво"?
1 2
hildi
Вот я и добралась до работы :-)

Маппинг таблиц выглядит у меня вот так:

from sqlalchemy import *
from sqlalchemy.orm import *

#engine = create_engine("postgres://stat_admin:blabla@172.0.0.0:5433/gf_cfv?pool=2&pool_recycle=300")
engine = create_engine("postgres://stat_admin:blabla@172.0.0.0:5433/gf_cfv")
meta = MetaData("postgres://stat_admin:blabla@172.0.0.0:5433/gf_cfv")
meta.reflect(bind = engine, schema = "public")

item = Table('team_ne', meta, autoload = True, autoload_with = engine)
listen = Table('listen', meta, autoload = True, autoload_with = engine)

class Item(object): pass
class Listen(object): pass

mapper(Item, item)
mapper(Listen, listen)
В закомментированной строчке неудавшаяся попытка сократить кол-во одновременных коннектов к базе.
Тут тоже все плохо?
PooH
честно говоря autoload для таблиц не пробовал, но так должно работать
from turbogears.database import metadata, _engine

item = Table('team_ne', metadata, autoload = True, autoload_with = _engine)
listen = Table('listen', metadata, autoload = True, autoload_with = _engine)

class Item(object): pass
class Listen(object): pass

mapper(Item, item)
mapper(Listen, listen)
Дело в том что TG сам создает для вас и engine, и сессии по данным из конфига, вы же создаете лишние. Посмотрите выше я давал примеры для других случаев.
hildi
А адрес, куда к базе подключаться, куда писать? *чеша в затылке*
PooH
hildi
А адрес, куда к базе подключаться, куда писать? *чеша в затылке*
а адрес у вас лежит в правильном месте, в файле конфигурации, в режиме отладки это файл dev.cfg
там есть строчка типа:
sqlalchemy.dburi=“postgres://admin:123@localhost/rieltiko”
это он и есть
hildi
Не работает, ругается на отсутствие энжин:


H:\team-ne>python start-team_ne.py
Traceback (most recent call last):
File “start-team_ne.py”, line 15, in <module>
start()
File “H:\team-ne\team_ne\commands.py”, line 51, in start
from team_ne.controllers import Root
File “H:\team-ne\team_ne\controllers.py”, line 9, in <module>
from model import Item, Listen
File “H:\team-ne\team_ne\model.py”, line 16, in <module>
item = Table('team_ne', metadata, autoload = True, autoload_with = _engine)
File “c:\Python25\lib\site-packages\sqlalchemy-0.5.0rc1-py2.5.egg\sqlalchemy\schema.py”, line 113,
in __call__
return type.__call__(self, name, metadata, *args, **kwargs)
File “c:\Python25\lib\site-packages\sqlalchemy-0.5.0rc1-py2.5.egg\sqlalchemy\schema.py”, line 242,
in __init__
_bind_or_error(metadata).reflecttable(self, include_columns=include_columns)
File “c:\Python25\lib\site-packages\sqlalchemy-0.5.0rc1-py2.5.egg\sqlalchemy\schema.py”, line 2054
, in _bind_or_error
raise exc.UnboundExecutionError(msg)
sqlalchemy.exc.UnboundExecutionError: The MetaData is not bound to an Engine or Connection. Executi
on can not proceed without a database to execute against. Either execute with an explicit connectio
n or assign the MetaData's .bind to enable implicit execution.
PooH
Да, действительно, в момент импорта модуля metadata еще не с биндина с engin. Сейчас покопаю дальше
hildi
Спасибо :-)
Мне уже прямо неудобно становится, я так злоупотребляю… Даже не знаю, как вас благодарить :-)
Хотите пряников? Или, например, гифт-кард на амазон? Или чем я отсюда могу быть вам полезна?
PooH
Ответ есть на официальном сайте TG :)
from turbogears.database import metadata, bind_meta_data
bind_meta_data()

item = Table('team_ne', metadata, autoload = True)
listen = Table('listen', metadata, autoload = True)

class Item(object): pass
class Listen(object): pass

mapper(Item, item)
mapper(Listen, listen)
там же, кстати, есть как указать параметры пула
sqlalchemy.pool_recycle = 30
в файле конфигурации
http://docs.turbogears.org/1.0/SQLAlchemy посмотрите там еще много интересного

ЗЫ: никаких злоупотреблений, мне самому интересно - я не пробовал в ТГ таблицы с отображением из существующей базы, к тому же у нас праздники :)
saabeilin
PooH
        w.save(ofile)
У меня, кстати, не работает. Утверждает, что, мол,

File '/home//controllers/reports.py', line 31 in excel
w.save(ofile)
File ‘build/bdist.linux-x86_64/egg/pyExcelerator/Workbook.py’, line 547 in save
File ‘build/bdist.linux-x86_64/egg/pyExcelerator/CompoundDoc.py’, line 532 in save
TypeError: coercing to Unicode: need string or buffer, cStringIO.StringO found

pyExcelerator сначала был “просто_установленный”, потом из svn trunk'а, результат один. Кстати, и со StringIO не работает.

UPDATE: отбой, замена на xlwt помогла, все отлично работает.
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