Я использую колбу и колбу-mysqldb
каждый раз, когда я хочу создать или выполнить запрос sql, курсор должен находиться внутри маршрута колбы
я хочу использовать курсор в другой функции, а не в маршруте
Также я хочу определить один курсор, поэтому мне не нужно вводить один и тот же код в каждой руте
вот мой код:
from flask import Flask, render_template, request
from flask_mysqldb import MySQL
import yaml
import json
app = Flask(__name__)
# config the database connection
db = yaml.safe_load(open('db.yaml'))
app.config['MYSQL_HOST'] = db['mysql_host']
app.config['MYSQL_USER'] = db['mysql_user']
app.config['MYSQL_PASSWORD'] = db['mysql_password']
app.config['MYSQL_DB'] = db['mysql_db']
mysql = MySQL(app)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# get the inputs from the form
user_details = request.form
# the key value is from the html name attriput
name = user_details['name']
email = user_details['email']
cur = mysql.connection.cursor()
cur.execute(
" INSERT INTO users(name,email ) VALUES(%s, %s)", (name, email))
mysql.connection.commit()
cur.close()
return 'success'
return render_template('index.html')
@app.route('/users')
def users():
cur = mysql.connection.cursor()
result_value = cur.execute(" SELECT * FROM users ")
if result_value > 0:
user_details = cur.fetchall()
return render_template('users.html', user_details=user_details)
#convert users data to json file
def json_conv():
cur = mysql.connection.cursor()
cur.execute("SHOW GLOBAL STATUS")
mysql.commit()
rs = cur.fetchall()
result = dict(rs)
with open('users.json', 'w') as f:
json.dump(result, f)
json_conv()
if __name__ == '__main__':
app.run(debug=True)
ПРИМЕЧАНИЕ: если я запускаю функцию, появляется эта ошибка:
Traceback (most recent call last):
File "app.py", line 74, in <module>
json_conv()
File "app.py", line 64, in json_conv
cur = mysql.connection.cursor()
AttributeError: 'NoneType' object has no attribute 'cursor'