干杯家伙,重构我的瓶的应用程序我被困在追平了数据库连接@app.before_request,并在关闭它@app.teardown_appcontext。我正在使用普通的 Psycopg2 和应用程序工厂模式。
首先,我创建了一个函数来调用应用程序工厂,因此我可以按照Miguel Grinberg 的建议使用 @app此处:
def create_app(test_config=None):
app = Flask(__name__, instance_relative_config=True)
--
from shop.db import connect_and_close_db
connect_and_close_db(app)
--
return app
Run Code Online (Sandbox Code Playgroud)
然后我尝试了http://flask.pocoo.org/docs/1.0/appcontext/#storing-data 上建议的这种模式:
def connect_and_close_db(app):
@app.before_request
def get_db_test():
conn_string = "dbname=testdb user=testuser password=test host=localhost"
if 'db' not in g:
g.db = psycopg2.connect(conn_string)
return g.db
@app.teardown_appcontext
def close_connection(exception):
db = g.pop('db', None)
if db is not None:
db.close()
Run Code Online (Sandbox Code Playgroud)
结果是:
TypeError: 'psycopg2.extensions.connection' object is not callable
Run Code Online (Sandbox Code Playgroud)
任何人都知道发生了什么以及如何使其发挥作用?
此外,我想知道如何访问连接对象来创建游标,一旦它的创建被绑定到before_request?