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

标签 python flask psycopg2

我应该如何将 psycopg2 与 Flask 一起使用?我怀疑每个请求都打开一个新连接是不好的,所以我怎么能只打开一个并使其对应用程序全局可用?

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

最佳答案

Flask 或任何 Web 服务器都需要使用连接池,正如您正确提到的,为每个请求打开和关闭连接是不明智的。
psycopg2 提供开箱即用的连接池。 AbstractConnectionPool您可以扩展和实现的类或 SimpleConnectionPool可以开箱即用的类。根据您运行 Flask 应用程序的方式,您可能会使用什么 ThreadedConnectionPool这是在 docs 中描述的作为

A connection pool that works with the threading module.


创建一个简单的 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 使用),它将维护连接并为您管理池。让你专注于你的逻辑

关于python - 如何在 Flask 中使用 psycopg2 (postgresql) 的连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565283/

相关文章:

python - 在Ubuntu16.04上,如何重复运行python脚本-使用crontab

python - 如何让 Flask 扩展支持 i18n?

python - 在 sql 查询 python 中使用时,格式选项不起作用

python - psycopg2 选择时间戳返回包裹在元组中的 datetime.datetime,如何解包?

python - 流体流动、传热和 Python

python - 如何在 Processing 中编码固定数量的半随机间隔且仍然适合固定大小图像的行?

javascript - 如何使用 Flask 将 JavaScript 连接到 Python 脚本?

django - PostgreSQL pg_database_size 不同于 pg_total_relation_size 的总和

python - 如何在 3d numpy 数组中查找 2d 数组的行

apache - Oauth2 登录在 AWS 上超时