mysqldb query:格式字符串的参数不足

2024-10-06 14:29:52 发布

您现在位置:Python中文网/ 问答频道 /正文

curs.execute ("INSERT INTO temperatur (datum, uhrzeit, ort, messwert) VALUES (CURRENT_DATE(), NOW(), %s, %s);" % ort, messwert)

删除此->

^{pr2}$

为什么这样不行?在


Tags: gtexecutedatecurrentnowinsertvaluesinto
2条回答

每个人都认为不应该使用字符串格式,但最简单的答案是需要包含元组的括号,即%(ort, messwert)

不要使用字符串格式,您将自己暴露在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字符串中的值没有正确的转义。在

相关问题 更多 >