Укажите connection_factory для create_engine () SQLAlchemy

У меня есть собственный класс фабрики соединений (наследуемый от 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.

См. также:  Каков наиболее эффективный способ чтения паркетного файла с разделами с помощью pyspark?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. skyler

    Когда в документации говорится о «соответствующих компонентах», это относится к компонентам API SQLAlchemy, а не к различным драйверам. Поскольку connection_factory — это параметр, который необходимо отправить в connect(), вы должны использовать ключевое слово connect_args в своем вызове create_engine (в документации также упоминается здесь). Таким образом:

    engine = create_engine(
        dsn.engine_info(), connect_args={'connection_factory': ConnectionEx})
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: