如何在Flask中使用与psycopg2(postgresql)的连接池

时间:2015-04-10 15:30:35

标签: python flask psycopg2

我应该如何在烧瓶中使用psycopg2?我怀疑每个请求打开一个新连接都不好,那么我怎样才能打开一个并使其全局可用于应用程序?

from flask import Flask
app = Flask(__name__)
app.config.from_object('config') # Now we can access the configuration variables via app.config["VAR_NAME"].

import psycopg2


import myapp.views

1 个答案:

答案 0 :(得分:0)

Flask 或任何 Web 服务器都需要使用连接池,正如您正确提到的,为每个请求打开和关闭连接是不明智的。

psycopg2 提供开箱即用的连接池。您可以扩展和实现的 AbstractConnectionPool 类或可以开箱即用的 SimpleConnectionPool 类。根据您运行 Flask 应用程序的方式,您可能会使用ThreadedConnectionPooldocs 中描述为

<块引用>

与线程模块配合使用的连接池。

创建一个简单的 Flask 应用并为其添加一个 ConnectionPool

import psycopg2
from psycopg2 import pool
from flask import Flask

app = Flask(__name__)




postgreSQL_pool = psycopg2.pool.SimpleConnectionPool(1, 20, user="postgres",
                                                         password="pass@#29",
                                                         host="127.0.0.1",
                                                         port="5432",
                                                         database="postgres_db")


@app.route('/')
def hello_world():
    # Use getconn() to Get Connection from connection pool
    ps_connection = postgreSQL_pool.getconn()
    # use cursor() to get a cursor as normal
    ps_cursor = ps_connection.cursor()
    # 
    # use ps_cursor to interact with DB
    #
    # close cursor
    ps_cursor.close()
    # release the connection back to connection pool
    postgreSQL_pool.putconn(ps_connection)
    return 'Hello, World!'

Flask 应用程序本身不完整或未准备好生产,请按照 Flask Docs 上的说明管理数据库凭据并在 Flask 上下文中跨 Flask 应用程序使用 Pool 对象

我强烈建议将诸如 SQLAlchemy 之类的库与 Flask(作为 wrapper 提供)一起使用,它们将为您维护连接并管理池。让你专注于你的逻辑