mysqldb查询:格式字符串的参数不够

时间:2018-02-05 20:59:22

标签: python mysql

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

为什么这不起作用?

2 个答案:

答案 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)