![](/img/trans.png)
[英]python format string TypeError: not all arguments converted during string formatting
[英]TypeError: not all arguments converted during string formatting string python
您可能之前已经看过它,但是我基本上是在尝试避免MySQL注入,因此我正在使用Python格式化查询,如下所示:
if "username" in form:
username = form["username"].value
else:
success = 0
error = "User Name is Missing"
cur.execute("SELECT COUNT(*) FROM users WHERE screenName=':1'",[username])
results = int(cur.fetchall()[0][0])
这引发一个错误,说:
<type 'exceptions.TypeError'>: not all arguments converted during string formatting
args = ('not all arguments converted during string formatting',)
message = 'not all arguments converted during string formatting'
知道有什么问题吗? 谢谢
您没有指定要使用的确切库,但是假设它兼容Python DB API ,则可能需要将execute
行更改为:
cur.execute("SELECT COUNT(*) FROM users WHERE screenName=%s",[username])
根据OP的评论进行编辑:
就防止SQL注入而言, %s
的使用是当前的标准。 我不确定您所链接的答案中的内容是怎么到达的...要记住的几件事是,该线程已关闭为“非建设性的”,并且答案也是〜7年太旧了,因此很有可能是那时出现了问题,而该答案可能一直在引用不再适用的内容。
但是%s
表示库(在execute
方法中)处理所有转义和引用,并且是防止注入的方法。 (与使用常规插值(例如,通过format
相反,这会使它易于注入。)
请注意,这不是 '%s'
,而是在execute
调用中使用foo % bar
,而是未引用的%s
,并将参数作为execute
的第二个参数传递。
例如,我使用了完全符合DB API的 psycopg2 ,其当前文档描述了使用%s
来防止注入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.