Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在flask应用程序中重新打开sqlite连接?_Python_Python 3.x_Flask_Sqlite - Fatal编程技术网

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访问在另一个文件中,所以我不得不发布很多。您想找到什么具体的解决方案?我想当您从上下文中关闭数据库时,您可以将其删除,以便在下次请求时打开。这听起来是正确的解决方案,我将稍后尝试并报告