![](/img/trans.png)
[英]How to set `lock_timeout` on a PostgreSQL connection with SQLAlchemy and psycopg2?
[英]How to set connection timeout in SQLAlchemy
我试图弄清楚如何在create_engine()
中设置连接超时,到目前为止我已经尝试过:
create_engine(url, timeout=10)
类型错误:使用配置 PGDialect_psycopg2/QueuePool/Engine 将无效参数“超时”发送到 create_engine()。 请检查关键字参数是否适合这种组件组合。
create_engine(url, connection_timeout=10)
类型错误:使用配置 PGDialect_psycopg2/QueuePool/Engine 将无效参数“connection_timeout”发送到 create_engine()。 请检查关键字参数是否适合这种组件组合。
create_engine(db_url, connect_args={'timeout': 10})
(psycopg2.OperationalError)无效的连接选项“超时”
create_engine(db_url, connect_args={'connection_timeout': 10})
(psycopg2.OperationalError)无效的连接选项“connection_timeout”
create_engine(url, pool_timeout=10)
我应该怎么办?
正确的方法是这个( connect_timeout
而不是connection_timeout
):
create_engine(db_url, connect_args={'connect_timeout': 10})
...它适用于 Postgres 和 MySQL
ps:(超时以秒为单位定义)
对于使用Flask-SQLAlchemy而不是普通 SQLAlchemy 的人,您可以选择两种将值传递给 SQLAlchemy 的create_engine
的方式:
SQLALCHEMY_ENGINE_OPTIONS
配置键(需要 Flask-SQLAlchemy>=2.4)SQLALCHEMY_ENGINE_OPTIONS = {
'connect_args': {
'connect_timeout': 5
}
}
flask_sqlalchemy.SQLAlchemy
时使用engine_option
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(
engine_options={ 'connect_args': { 'connect_timeout': 5 }}
)
db.init_app(app)
编辑:这些示例使用(至少)适用于 MySQL 和 PostgreSQL(值表示秒)的connect_timeout
参数,其他 DBMS 可能需要传递不同的参数名称以影响连接超时。 我建议查看您的 DBMS 手册以检查此类选项。
回应@nivhanin 下面的评论,该评论询问“connect_timeout 变量的默认值是什么(一般来说和特定于 MySQL 数据库?”?(我没有足够的声誉来发表评论)。
Mysql5.7 的connect_timeout
默认为10 秒
也可能相关:
wait_timeout
-- 默认值 28800 秒(8 小时)interactive_timeout
-- 默认值 28800 秒(8 小时)对于SQLite 3.28.0:
create_engine(db_name, connect_args={'timeout': 1000})
将连接超时设置为 1000 秒。
对于sqlite
后端:
create_engine(db_url, connect_args={'connect_timeout': timeout})
将连接超时设置为timeout
。
对于SQL Server使用Remote Query Timeout
:
create_engine(db_url, connect_args={'Remote Query Timeout': 10})
默认为 5 秒。
对于通过ibm_db2_sa
+ pyodbc
的 db2 后端:
我查看了源代码,从版本 0.3.5(2019/05/30)开始似乎无法控制连接超时: https ://github.com/ibmdb/python-ibmdbsa
我发这个是为了省去别人看的麻烦。
我尝试为绑定的mssql+pyodbc数据库和默认sqlite执行此操作,但无法完成上述任何操作。
最终对我有用的是
SQLALCHEMY_ENGINE_OPTIONS = {
'connect_args': {"timeout": 10}
}
这也与SQLAlchemy 文档一致
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.