簡體   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