使用python 3的.format和psycopg2
WHERE
US.UserId = UP.UserId AND
UP.country = {2}
AND UP.state= {3}
AND UP.city= {4}
它抱怨UP.country中的列'RSA'不存在。如果我在python 2中使用%s而不是我得到同样的问题而且它不会将其作为列读取。
我在这里缺少什么?
谢谢,
答案 0 :(得分:0)
我注意到内部工作原理,但是'{}'围绕我解决了这个问题。
答案 1 :(得分:0)
将%s
用于带psycopg2的变量占位符。
确保正确传递参数,以便正确转义。
>>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct
如果对用户输入使用%格式或format()
,则易受SQL注入攻击。
>>> cur.execute("INSERT INTO foo VALUES (%s)" % "bar", ()) # wrong
>>> cur.execute("INSERT INTO foo VALUES ({} )".format("bar"), ()) # wrong
有关详细信息,请参阅passing parameters to SQL queries上的文档。
请注意,Python 3中的常规字符串支持%s
格式,以及format()