[英]Executing multiple SQL queries with Python Flask
我有一个 python function 应该执行 2 个 SQL 查询。 我发现不可能一次在一个命令中执行 2 个查询,因此作为一种解决方法,我创建了一个查询列表并尝试使用执行命令对其进行迭代。 然而,MySQL 表中没有添加任何内容。 这是代码:
@app.route('/addComment', methods=['POST'])
def addComment():
try:
if session.get('user'):
_description = request.form['description']
_user = session.get('user')
_term_id = request.form['termID']
_time = datetime.now()
operation = ['"INSERT INTO comments (description, user, termID, time) VALUES (%s, %s, %s, %s)", (_description, _user, _term_id, _time)', '"INSERT INTO history (user, term, time) VALUES (%s, %s, %s)", (_user, _term_id, _time)']
conn = mysql.connect()
cursor = conn.cursor()
for item in operation:
cursor.execute()
conn.commit()
data = cursor.fetchall()
if len(data) == 0:
conn.commit()
return json.dumps({'status':'OK'})
else:
return json.dumps({'status':'ERROR'})
except Exception as e:
return json.dumps({'status':'Unauthorized access'})
finally:
cursor.close()
conn.close()
请你帮助我好吗?
您的代码中的错误存在于以下几个方面:
A. 在迭代 sql 语句未传递给execute()
应该:
for item in operation:
cursor.execute(item)
conn.commit()
B.无效的参数化
'"INSERT INTO comments (description, user, termID, time) VALUES (%s, %s, %s, %s)", (_description, _user, _term_id, _time)'
此字符串语句不会将变量应用于 SQL 语句字符串。 根据您的值类型,您应该决定是否添加'
(撇号)。 更安全的方法是将参数传递给.execute()
function。 下面的例子。
cursor.execute(
"INSERT INTO comments (description, user, termID, time) VALUES (:description, :user, :term_id, :time)",
description=_description,
user=_user,
term_id=_term_id,
time=_time
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.