如何在SQLAlchemy中设置连接超时

dav*_*ode 20 python postgresql sqlalchemy psycopg2

我试图找出如何设置连接超时create_engine(),到目前为止我已经尝试过:

create_engine(url, timeout=10)
Run Code Online (Sandbox Code Playgroud)

TypeError:使用配置PGDialect_psycopg2/QueuePool/Engine发送到create_engine()的无效参数'timeout'.请检查关键字参数是否适合此组件组合.

create_engine(url, connection_timeout=10)
Run Code Online (Sandbox Code Playgroud)

TypeError:使用配置PGDialect_psycopg2/QueuePool/Engine发送到create_engine()的无效参数'connection_timeout'.请检查关键字参数是否适合此组件组合.

create_engine(db_url, connect_args={'timeout': 10})
Run Code Online (Sandbox Code Playgroud)

(psycopg2.OperationalError)无效的连接选项"timeout"

create_engine(db_url, connect_args={'connection_timeout': 10})
Run Code Online (Sandbox Code Playgroud)

(psycopg2.OperationalError)无效的连接选项"connection_timeout"

create_engine(url, pool_timeout=10)
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

dav*_*ode 35

正确的方法是这个(connect_timeout而不是connection_timeout):

create_engine(db_url, connect_args={'connect_timeout': 10})
Run Code Online (Sandbox Code Playgroud)

...它适用于Postgres和MySQL

  • connect_timeout变量的默认值是什么(通常是特定于MySQL数据库的? (5认同)
  • 10 什么?分钟、秒或毫秒? (4认同)
  • FWIW,此处记录了此语法:http://docs.sqlalchemy.org/en/latest/core/engines.html#custom-dbapi-args (2认同)
  • @Ganesh Satpute 秒! (2认同)

dap*_*piu 10

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

  1. 使用SQLALCHEMY_ENGINE_OPTIONS配置键(需要 Flask-SQLAlchemy>=2.4)
SQLALCHEMY_ENGINE_OPTIONS = {
    'connect_args': {
        'connect_timeout': 5
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 或者,在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)
Run Code Online (Sandbox Code Playgroud)

编辑:示例使用的connect_timeout参数(至少)适用于 MySQL 和 PostgreSQL(值表示秒),其他 DBMS 可能需要传递不同的参数名称以影响连接超时。我建议检查您的 DBMS 手册以检查此类选项。


dea*_*gle 7

回应@nivhanin 下面的评论,其中询问“connect_timeout 变量的默认值是多少(一般情况下和特定于 MySQL 数据库?”?(我没有足够的声誉来发表评论)。

connect_timeoutMysql5.7默认为10秒

也可能相关:


Ant*_*ton 7

对于SQLite 3.28.0:

create_engine(db_url, connect_args={'timeout': 1000})
Run Code Online (Sandbox Code Playgroud)

将连接超时设置为 1000 秒。