繁体   English   中英

TypeError:在字符串格式化字符串python期间,并非所有参数都已转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM