Python 如何在flask应用程序中重新打开sqlite连接?
我正在遵循来自 这是第一个片段:Python 如何在flask应用程序中重新打开sqlite连接?,python,python-3.x,flask,sqlite,Python,Python 3.x,Flask,Sqlite,我正在遵循来自 这是第一个片段: import sqlite3 from flask import g DATABASE = '/path/to/database.db' def get_db(): db = getattr(g, '_database', None) if db is None: db = g._database = sqlite3.connect(DATABASE) return db @app.teardown_appconte
import sqlite3
from flask import g
DATABASE = '/path/to/database.db'
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()
但是,当我使用此代码进行两次查询数据库的调用时,第二次调用失败,原因是:
sqlite3.ProgrammingError:无法在关闭的数据库上操作
这是有道理的,因为db连接在第一次调用结束时关闭,然后在第二次调用时不会重新打开,因为db is None是false
如何重新打开数据库?如果在关闭数据库时将其从上下文中删除,它将在下次请求时重新打开
import sqlite3
from flask import g
DATABASE = '/path/to/database.db'
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()
g.pop('_database')
你的flask版本是什么?版本是0.12.2Tanks,你能连接你的路由吗?我不认为路由有用,因为我的逻辑在一个控制器中,db访问在另一个文件中,所以我不得不发布很多。您想找到什么具体的解决方案?我想当您从上下文中关闭数据库时,您可以将其删除,以便在下次请求时打开。这听起来是正确的解决方案,我将稍后尝试并报告