【问题标题】:Specify the connection_factory to SQLAlchemy's create_engine()将 connection_factory 指定到 SQLAlchemy 的 create_engine()
【发布时间】:2012-12-25 07:19:27
【问题描述】:

我有一个我希望 SQLAlchemy 使用的自定义连接工厂类(继承自 psycopg2.extensions.connection)。来自create_engine() 文档,

**kwargs 采用多种选项,这些选项被路由到相应的组件。参数可能特定于引擎, 底层方言,以及池。特定方言也 接受该方言独有的关键字参数。

当我尝试指定 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.

【问题讨论】:

    标签: python postgresql sqlalchemy psycopg2


    【解决方案1】:

    当文档谈到“适当的组件”时,它指的是 SQLAlchemy API 的组件,而不是各种驱动程序。由于connection_factory 是需要发送到connect() 的参数,因此您应该在调用create_engine 时使用关键字connect_argsdocumentation 也提到了here)。因此:

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

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 2017-09-26
      • 2021-12-04
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2019-10-30
      • 2016-07-06
      相关资源
      最近更新 更多