如何在与 SQLAlchemy 和 psycopg2 的 PostgreSQL 连接上设置“lock_timeout”?

Posted

技术标签:

【中文标题】如何在与 SQLAlchemy 和 psycopg2 的 PostgreSQL 连接上设置“lock_timeout”?【英文标题】:How to set `lock_timeout` on a PostgreSQL connection with SQLAlchemy and psycopg2? 【发布时间】:2020-04-30 15:40:58 【问题描述】:

使用 PostgreSQL,您可以运行此查询来为会话设置特定的 lock_timeout

SET lock_timeout TO '3s'

我想知道在设置与 SQLAlchemy 的连接时是否有设置此选项的好方法。我实例化 SQLAlchemy 会话的方式如下:

engine = create_engine('postgresql+psycopg2://user:pswd@host:port/name')
session = scoped_session(sessionmaker(bind=engine))

我尝试将它传递给connect_args,但不支持:

engine = create_engine(
    'postgresql+psycopg2://user:pswd@host:port/name',
    connect_args='lock_timeout': 3
)

有没有办法使用 SQLAlchemy 和 psycopg2 为每个会话/连接设置此选项?

【问题讨论】:

【参考方案1】:

事实证明,这是为会话设置lock_timeout 的正确方法(注意该值以毫秒为单位):

engine = create_engine(
    'postgresql+psycopg2://user:pswd@host:port/name',
    connect_args='options': '-c lock_timeout=3000'
)

【讨论】:

connect_args='lock_timeout': 3 方法不起作用还是不是正确的方法?另外,你能分享一些文档的链接吗?我不是这样找到的:'options': '-c lock_timeout=3000' 在文档中的任何地方传递参数。

以上是关于如何在与 SQLAlchemy 和 psycopg2 的 PostgreSQL 连接上设置“lock_timeout”?的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy、Psycopg2 和 Postgresql 复制

SQLAlchemy,Psycopg2和Postgresql COPY

如何使用Flask,SQLAlchemy或psycopg2从Postgres中的光标获取数据

SQLAlchemy(psycopg2.ProgrammingError)无法适应类型'dict'

SQLAlchemy 还是 psycopg2?

SQLAlchemy/psycopg2 到 PostgreSQL 数据库的连接是不是加密