以下代码要求系统输入已填写并显示的每个复选框。 显示页面实际上正在显示新注册的行,但是当我在终端上执行相同的代码SELECT * FROM时,系统将不显示任何内容。看来数据库是临时的,因为当我重新启动flask应用程序时,新行消失了。
from flask import Flask, render_template, request
import pymysql
db = pymysql.connect("127.0.0.1", "root", "toor", "msg_test")
app = Flask(__name__)
app.config['SECRET_KEY'] = '31e1326344483068'
@app.route('/preenche', methods=['POST'])
def selecionarExames():
if request.method == 'POST':
cursor = db.cursor()
for t in request.form.getlist('check'):
sql = "INSERT INTO exames_realizados (nomeExame, valores) VALUES ('{}', 0)".format(t)
cursor.execute(sql)
v = "SELECT * FROM exames_realizados"
cursor.execute(v)
results = cursor.fetchall()
return render_template('preenche.html', results=results)
if __name__ == '__main__':
app.run(debug=True)
答案 0 :(得分:2)
首先,不要对查询进行字符串格式化-您正在向SQL injection attacks开放代码。相反,请正确设置查询参数:
sql = """
INSERT INTO
exames_realizados
(nomeExame, valores)
VALUES
(%s, 0)
"""
cursor.executemany(sql, request.form.getlist('check'))
请注意如何分别传递查询参数和使用.executemany()
。
就看到插入查询的结果而言,提交事务以保留更改:
db.commit()