繁体   English   中英

如何在 flask_mysqldb 中只声明一次 cursor

[英]how to declare cursor in flask_mysqldb for only once

我有这个代码(不完整)

@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',"")

问题是我每次都必须在 request.method=='POST' 块内重新声明 cursor 如果我在外部声明它(比如第一行)我收到一条错误消息说 cursor 未定义。因为后连接尚未激活

在 Flask 中,可以使用 before_request 装饰器只创建一次 cursor 并在多个路由中重复使用。 下面是一个例子:在这个例子中,cursor 是使用 before_request function 中的 mysql.connection 创建的,它在每个请求之前运行。 然后将 cursor 存储在 g(Flask 全局请求对象)中,因此可以在多个路由中重复使用。 teardown_request function 在每次请求后关闭 cursor 和连接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM