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