2016-01-29 2 views
1

Я добавляю новый класс ORM, используя систему декларативного отображения sqlalchemy. У моей кодовой базы есть существующий пул соединений psycopg2, который я хочу использовать повторно - я не хочу, чтобы код, использующий мои классы orm, имел свой собственный пул. Существует много существующего кода, который напрямую вызывает get_conn в пуле psycopg2, поэтому я не хочу просто его заменять.Создайте движок sqlalchemy с помощью существующего пула соединений psycopg2

У меня возникла проблема с подключением двигателя.

pool_config = {...} 
POOL = psycopg2.pool.ThreadedConnectionPool(0, 32, **pool_config) 

[...] 

engine = sqlalchemy.create_engine('postgresql://', pool=POOL) 
Session = sqlalchemy.orm.sessionmaker(bind=engine) 
... 

Проблема с моим вызовом create_engine;

File "/home/ubuntu/environment/local/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 362, in create_engine 
    return strategy.create(*args, **kwargs) 
    File "/home/ubuntu/environment/local/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 159, in create 
    event.listen(pool, 'first_connect', on_connect) 
    File "/home/ubuntu/environment/local/lib/python2.7/site-packages/sqlalchemy/event/api.py", line 63, in listen 
    _event_key(target, identifier, fn).listen(*args, **kw) 
    File "/home/ubuntu/environment/local/lib/python2.7/site-packages/sqlalchemy/event/registry.py", line 190, in listen 
    dispatch_descriptor = getattr(target.dispatch, identifier) 
AttributeError: 'ThreadedConnectionPool' object has no attribute 'dispatch' 

Возможно ли использовать мой существующий пул таким образом или мне нужно создать отдельный пул соединений, который будет использоваться этими классами?

ответ