繁体   English   中英

如何在 SQLAlchemy 中设置连接超时

[英]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

文档 sqlalchemy 连接参数

ps:(超时以秒为单位定义)

对于使用Flask-SQLAlchemy而不是普通 SQLAlchemy 的人,您可以选择两种将值传递给 SQLAlchemy 的create_engine的方式:

  1. 使用SQLALCHEMY_ENGINE_OPTIONS配置键(需要 Flask-SQLAlchemy>=2.4)
SQLALCHEMY_ENGINE_OPTIONS = {
    'connect_args': {
        'connect_timeout': 5
    }
}
  1. 或者,在实例化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 秒

也可能相关:

对于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM