2013-01-10 31 views
0

我有一個自定義連接工廠類(它繼承自psycopg2.extensions.connection),我希望SQLAlchemy使用它。從create_engine()文檔,指定connection_factory到SQLAlchemy的create_engine()

** kwargs採取各種各樣的這些對他們適當的組件路由選項。參數可能特定於Engine, 底層Dialect以及Pool。具體的方言也 接受該方言獨有的關鍵字參數。

當我嘗試指定connection_factory參數,如:

engine = create_engine(dsn.engine_info(), connection_factory=ConnectionEx)

我得到這個回溯:

Traceback (most recent call last): File "foo.py", line 8, in <module> 
    from user import test_user File "/vagrant/workspace/panel/panel/user.py", line 18, in <module> 
    from panel.helpers import intval File "/vagrant/workspace/panel/panel/__init__.py", line 51, in <module> 
    import panel.views File "/vagrant/workspace/panel/panel/views.py", line 13, in <module> 
    from panel.api import api_functions File "/vagrant/workspace/panel/panel/api/api_functions.py", line 27, in <module> 
    from panel.targeting import SavedTargetSet File "/vagrant/workspace/panel/panel/targeting.py", line 19, in <module> 
    from panel.database import panelists_tbl, us_cities_tbl, income_buckets_tbl File "/vagrant/workspace/panel/panel/database.py", line 39, in <module> 
    engine = create_engine(dsn.engine_info(), connection_factory=ConnectionEx) File "/home/vagrant/.virtualenvs/project/lib/python2.6/site-packages/sqlalchemy/engine/__init__.py", line 331, in create_engine 
    return strategy.create(*args, **kwargs) File "/home/vagrant/.virtualenvs/project/lib/python2.6/site-packages/sqlalchemy/engine/strategies.py", line 141, in create 
    engineclass.__name__)) TypeError: Invalid argument(s) 'connection_factory' sent to create_engine(), using configuration PGDialect_psycopg2/QueuePool/Engine. Please check that the keyword arguments are appropriate for this combination of components. 

回答

2

當文檔被談論 「適當的組件,」它指的是SQLAlchemy API的組件,而不是各種驅動程序。由於connection_factory是需要發送到connect()的參數,因此在撥打create_enginedocumentation也提到here)時,應該使用關鍵字connect_args。因此:

engine = create_engine(
    dsn.engine_info(), connect_args={'connection_factory': ConnectionEx}) 
相關問題