Flask + Postgresql和打开/关闭数据库连接
问题描述:
我正在尝试构建一个简单的Flask Web应用程序来查询postgres数据库并插入/删除数据。我什至不知道更新/插入,但至少我只是查询数据库。我不想使用任何ORM,因为它非常简单。我想使用psycopg2
,因为我之前在我的简单Python应用程序中使用过它。现在我想知道如何以及何时打开和关闭数据库连接。我已经看到这个:http://flask.pocoo.org/docs/0.12/tutorial/dbcon/,但它没有找到答案。Flask + Postgresql和打开/关闭数据库连接
答
http://flask.pocoo.org/docs/0.12/patterns/sqlite3/提供了一个更好的例子。它的sqllite,但所有不同的是如何建立初始连接。那么,它采用sqllite3
,把你的电话psycopg2
在:
import sqlite3
from flask import g
DATABASE = '/path/to/database.db'
@app.before_request
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
您可以显示使用DB这里的完全工作代码示例:https://github.com/pallets/flask/blob/master/examples/flaskr/flaskr/flaskr.py。请注意,在@app.route
方法中,每个请求手动建立数据库连接的示例,而上面的示例使用@app.before_request
钩子在调用路由方法之前建立它。
你说你不想要一个ORM,但是你也可以用非Orm的方式使用SQLAlchemy
:https://docs.sqlalchemy.org/en/latest/core/tutorial.html。这样做的好处是,有特定的session
对象用于管理db连接:http://flask.pocoo.org/docs/0.12/patterns/sqlalchemy/
应该在哪里调用get_db? – Jodooomi
文档建议调用应该绑定到当前的上下文,在这种情况下是请求,因此将'@ app.before_request'属性放在方法上应该这样做。我更新了代码示例。 – user783836
什么是“g”,它是否可以存储变量的会话对象? – Jodooomi