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的方式使用SQLAlchemyhttps://docs.sqlalchemy.org/en/latest/core/tutorial.html。这样做的好处是,有特定的session对象用于管理db连接:http://flask.pocoo.org/docs/0.12/patterns/sqlalchemy/

+0

应该在哪里调用get_db? – Jodooomi

+0

文档建议调用应该绑定到当前的上下文,在这种情况下是请求,因此将'@ app.before_request'属性放在方法上应该这样做。我更新了代码示例。 – user783836

+0

什么是“g”,它是否可以存储变量的会话对象? – Jodooomi