У меня есть собственный класс фабрики соединений (наследуемый от psycopg2.extensions.connection
), который я бы хотел использовать в SQLAlchemy. Из create_engine()
документации,
** kwargs использует широкий спектр опций, направленных на соответствующие компоненты. Аргументы могут быть специфичными для Engine, базового диалекта, а также для пула. Определенные диалекты также принимают аргументы ключевого слова, уникальные для этого диалекта.
Когда я пытаюсь указать параметр 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.
Когда в документации говорится о «соответствующих компонентах», это относится к компонентам API SQLAlchemy, а не к различным драйверам. Поскольку
connection_factory
— это параметр, который необходимо отправить вconnect()
, вы должны использовать ключевое словоconnect_args
в своем вызовеcreate_engine
(в документации также упоминается здесь). Таким образом: