How to set connection timeout in SQLAlchemy

后端 未结 7 779
暗喜
暗喜 2020-12-14 16:00

I\'m trying to figure out how to set the connection timeout in create_engine(), so far I\'ve tried:

create_engine(url, timeout=10)
相关标签:
7条回答
  • 2020-12-14 16:15

    For whoever is using Flask-SQLAlchemy instead of plain SQLAlchemy, you can choose between two ways for passing values to SQLAlchemy's create_engine:

    1. Use SQLALCHEMY_ENGINE_OPTIONS configuration key (Flask-SQLAlchemy>=2.4 required)
    SQLALCHEMY_ENGINE_OPTIONS = {
        'connect_args': {
            'connect_timeout': 5
        }
    }
    
    1. Or, in alternative, use engine_option when instantiating 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: The examples are using the connect_timeout argument that works (at least) for MySQL and PostgreSQL (value represent seconds), other DBMS may require different argument name to be passed to affect the connection timeout. I suggest to check your DBMS manual to check for such option.

    0 讨论(0)
  • 2020-12-14 16:16

    For sqlite backend:

    create_engine(db_url, connect_args={'connect_timeout': timeout})
    

    will set the connection timeout to timeout.

    0 讨论(0)
  • 2020-12-14 16:17

    The right way is this one (connect_timeout instead of connection_timeout):

    create_engine(db_url, connect_args={'connect_timeout': 10})
    

    ...and it works with both Postgres and MySQL

    ps: (the timeout is defined in seconds)

    0 讨论(0)
  • 2020-12-14 16:22

    for SQL Server use the Remote Query Timeout:

    create_engine(db_url, connect_args={'Remote Query Timeout': 10})
    

    default is 5 seconds.

    0 讨论(0)
  • 2020-12-14 16:27

    For a db2 backend via ibm_db2_sa + pyodbc:

    I looked through the source code, and there seems to be no way to control the connection timeout as of version 0.3.5 (2019/05/30): https://github.com/ibmdb/python-ibmdbsa

    I'm posting this to save others the trouble of looking.

    0 讨论(0)
  • 2020-12-14 16:30

    For SQLite 3.28.0:

    create_engine(db_name, connect_args={'timeout': 1000})
    

    will set the connection timeout to 1000 seconds.

    0 讨论(0)
提交回复
热议问题