代码之家  ›  专栏  ›  技术社区  ›  user1187968

sqlAlchemy.pool+psycopg2超时问题

  •  10
  • user1187968  · 技术社区  · 6 年前

    我有一个Web应用程序超时问题,我怀疑错误在数据库中。查询运行时间太长。

    如何增加设置的允许运行时间?

    我正在使用数据库池 sqlalchemy psycopg2 .

    我的数据库是 后格雷斯 数据库。

      import psycopg2
      import sqlalchemy.pool as pool
    
      def generate_conn_string(db_name):
            db_name = db_name.upper()
            conn_string = "host='{}' port='{}' dbname='{}' user='{}' password='{}' ".format(
                os.environ.get('DB_HOST_' + db_name),
                os.environ.get('DB_PORT_' + db_name),
                os.environ.get('DB_NAME_' + db_name),
                os.environ.get('DB_USER_' + db_name),
                os.environ.get('DB_PASSWORD_' + db_name))
            return conn_string
    
       def get_conn_():
            db_name = "mydb"
            conn_string = Pooling.generate_conn_string(db_name)
            conn = psycopg2.connect(conn_string)
            return conn
    
       connection_pool = pool.QueuePool(get_conn, max_overflow=30, pool_size=5)
    
    1 回复  |  直到 6 年前
        1
  •  7
  •   James Lim    6 年前

    我假设你在问 statement timeouts 在PostgreSQL中。使用sqlAlchemy的方式有点奇怪,但是普通的sqlAlchemy构造函数接受附加的 connect_args 可以这样使用的参数

    engine = create_engine(..., connect_args={"options": "-c statement_timeout=5000"})
    

    请注意,超时以毫秒为单位。在您的情况下,您可以使用 options 直接psycopg2/libpq:

    conn = psycopg2.connect(conn_string, , options='-c statement_timeout=5000')
    

    相关问题: Configure query/command timeout with sqlalchemy create_engine?