POST 得到的数据如果已经存在于数据库 Genre 表里,应该显示“该数据已存在于数据库中”,但代码出现问题,只会直接显示“未能将指定内容加入数据库”
@app.route('/add/genre', methods = ['POST'])
def add_genre():
if request.method == 'POST':
genre = request.form['genre']
conn = sqlite3.connect("Mydatabase.db")
cur = conn.cursor()
cur.execute("SELECT Name FROM Genre")
genreName = cur.fetchall()
string = "成功添加 " + genre + " 到数据库."
prompt = {string}
error = ""
if genre in genreName: // ←
prompt = {"该数据已存在于数据库中"}
error = "exist"
else:
with sqlite3.connect("Mydatabase.db") as conn:
try:
cur = conn.cursor()
cur.execute("INSERT INTO Genre (Name) VALUES (?)", ('genre'))
conn.commit()
except:
prompt = {"未能将指定内容加入数据库"}
error = "exist"
return render_template('add_genre.html', messages=prompt, error=error)
提下建议
1、如果数据量非常大,这样直接读整个库 , 内存资源用太大。
2、建议改成这样的逻辑(按你的代码,大概做了调整,没验证过)
@app.route('/add/genre', methods=['POST'])
def add_genre():
prompt = {"没有数据"}
error = "error"
if request.method == 'POST':
genre = request.form['genre']
conn = sqlite3.connect("Mydatabase.db")
cur = conn.cursor()
cur.execute("SELECT Name FROM Genre where name = '{}'".format(genre))
genreName = cur.fetchall()
if len(genreName)>0:
prompt = {"该数据已存在于数据库中"}
error = "exist"
else:
try:
cur = conn.cursor()
cur.execute("INSERT INTO Genre (Name) VALUES (?)", ('genre'))
conn.commit()
except:
prompt = {"未能将指定内容加入数据库"}
error = "exist"
string = "成功添加 " + genre + " 到数据库."
prompt = {string}
error = ""
return render_template('add_genre.html', messages=prompt, error=error)