如何在flask_mysqldb中只声明一次游标

mgdq6dx1  于 2023-02-03  发布在  Mysql
关注(0)|答案(1)|浏览(136)

我有这个代码(不完整)

@app.route('/', methods = ['GET','POST'])
def home():
    """
    the main function for routing home
    """
    if request.method == 'POST':
        try:
            if not cursor:
                cursor = mysql.connection.cursor()
            url = request.form.get('link',"")

事情是我必须重新声明游标每一次内部请求.方法=='POST'块如果我声明它外部(说第一行)我得到一个错误说游标未定义.因为后连接还没有激活

9rbhqvlz

9rbhqvlz1#

在Flask中,你可以使用before_request装饰器来创建一个游标,然后在多个路由中重用它。在本例中,游标是使用before_request函数中的mysql.connection创建的,该函数在每次请求之前运行。然后游标存储在g(Flask全局请求对象)中,以便可以在多个路由中重用它。teardown_request函数在每次请求之后关闭游标和连接。

from flask import Flask
from flask_mysqldb import MySQL

app = Flask(__name__)
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'user'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'database'

mysql = MySQL(app)

@app.before_request
def before_request():
    g.conn = mysql.connection
    g.cursor = g.conn.cursor()

@app.teardown_request
def teardown_request(exception):
    if hasattr(g, 'cursor'):
        g.cursor.close()
    if hasattr(g, 'conn'):
        g.conn.close()

@app.route('/')
def index():
    g.cursor.execute('SELECT * FROM table')
    data = g.cursor.fetchall()
    return data

相关问题