2

我正在尝试执行一个 mysql 查询,它需要包含 % 字符...在构建查询时,我遇到了 python 使用 % 并试图将其作为变量粘贴的问题:

statmt="select id from %s WHERE `email` LIKE %blah%" % (tbl)
self.cursor.execute(statmt)

这自然会引起:

statmt="select id from %s WHERE `email` LIKE %blah%" % (tbl)
TypeError: not enough arguments for format string

我应该如何解决这个问题,以便 Python 停止将其作为变量读取,并将其作为字符串的一部分?

谢谢!

4

4 回答 4

7

%在Python 格式化表达式中需要文字时,请使用%%

statmt="select id from %s WHERE `email` LIKE '%%blah%%'" % (tbl)

请参阅文档第 5.6.2 节。字符串格式化操作以获取更多信息。

于 2012-08-22T20:22:21.903 回答
2

您不需要使用字符串插值。execute 方法会为您处理它,因此您可以这样做:

statmt="select id from %s WHERE `email` LIKE %blah%"
self.cursor.execute(statmt, tbl)
于 2012-08-22T20:22:31.083 回答
2

你应该逃避你的百分号%%

您可能应该使用参数化查询?,不是字符串插值。

于 2012-08-22T20:22:36.057 回答
1

您可以使用str.format

statmt="select id from {tbl} WHERE `email` LIKE %blah%".format(tbl=tbl)

确保您没有创建 SQL 注入漏洞。

于 2012-08-22T20:22:35.803 回答