[英]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.