我试图弄清楚如何在create_engine()
中设置连接超时,到目前为止我已尝试过:
create_engine(url, timeout=10)
TypeError:无效的参数'超时'使用配置PGDialect_psycopg2 / QueuePool / Engine发送到create_engine()。请检查 关键字参数适用于此组合 组件。
create_engine(url, connection_timeout=10)
TypeError:无效的参数' connection_timeout'寄去 create_engine(),使用配置 PGDialect_psycopg2 / QueuePool /引擎。请检查关键字 参数适用于这种组件组合。
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)
我该怎么办?
答案 0 :(得分:31)
正确的方法是这一个(connect_timeout
而不是connection_timeout
):
create_engine(db_url, connect_args={'connect_timeout': 10})
...它适用于Postgres和MySQL
答案 1 :(得分:0)
回应@nivhanin下面的评论,问及" connect_timeout变量的默认值是什么(一般而言,特定于MySQL数据库?"?(我没有足够的声誉)留下评论)。
Mysql5.7的connect_timeout
默认为10 seconds
也许相关:
wait_timeout
- default value of 28800 seconds (8 hours) interactive_timeout
- default value of 28800 seconds (8 hours) 答案 2 :(得分:0)
对于sqlite
后端:
create_engine(db_url, connect_args={'connect_timeout': timeout})
会将连接超时设置为timeout
。
答案 3 :(得分:0)
对于 SQL Server ,请使用Remote Query Timeout
:
create_engine(db_url, connect_args={'Remote Query Timeout': 10})
默认值为5秒。
答案 4 :(得分:0)
对于 SQLite 3.28.0:
create_engine(db_name, connect_args={'timeout': 1000})
将连接超时设置为1000秒。
答案 5 :(得分:0)
对于通过ibm_db2_sa
+ pyodbc
的db2后端:
我仔细查看了源代码,从0.3.5版(2019/05/30)开始似乎没有办法控制连接超时: https://github.com/ibmdb/python-ibmdbsa
我发布此消息是为了省去别人看的麻烦。
答案 6 :(得分:0)
对于使用 Flask-SQLAlchemy 而不是普通SQLAlchemy的用户,您可以选择两种将值传递给SQLAlchemy的create_engine
的方式:
SQLALCHEMY_ENGINE_OPTIONS
配置密钥(需要Flask-SQLAlchemy> = 2.4)SQLALCHEMY_ENGINE_OPTIONS = {
'connect_args': {
'connect_timeout': 5
}
}
engine_option
时使用flask_sqlalchemy.SQLAlchemy
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)
EDIT:示例使用的connect_timeout
参数(至少)适用于MySQL和PostgreSQL(值表示秒),其他DBMS可能需要传递不同的参数名称以影响连接超时。我建议您查阅DBMS手册以检查是否有这种选择。