簡體   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