curs.execute ("INSERT INTO temperatur (datum, uhrzeit, ort, messwert) VALUES (CURRENT_DATE(), NOW(), %s, %s);" % ort, messwert)
退出此 - >
curs.execute ("INSERT INTO temperatur (datum, uhrzeit, ort, messwert) VALUES (CURRENT_DATE(), NOW(), %s, %s);" % ort, messwert)
TypeError: not enough arguments for format string
为什么这不起作用?
答案 0 :(得分:3)
不要使用字符串格式化,而是将自己暴露给SQL注入。
在第二个参数中将参数作为序列传递:
curs.execute(
"INSERT INTO temperatur (datum, uhrzeit, ort, messwert) "
"VALUES (CURRENT_DATE(), NOW(), %s, %s)",
(ort, messwert))
此处(ord, messwert)
是作为curs.execute()
的第二个参数传入的元组。您不需要SQL语句中的;
。
您收到错误是因为您只将一个值传递给%
字符串格式,您使用的表达式为"string value" % ort
,因为messwert
正在传递作为curs.execute()
的第二个参数。您必须使用"string value" % (ord, messwert)
代替。但是,您应该避免完全使用字符串格式,因为这会使您容易受到SQL注入攻击,攻击者利用缺少适当的转义应用于插入SQL字符串的值。
答案 1 :(得分:0)
每个人都是对的,你不应该使用字符串格式,但快速的答案只是你需要包含你的元组的括号,即%(ort, messwert)