繁体   English   中英

当对psycopg2使用.format时,它会将其读取为列名,但使用%不会出现问题

[英]When using .format for psycopg2 it reads it as a column name but no issue using %

当使用带有psycopg2的python 3的.format时

WHERE 
            US.UserId = UP.UserId AND
            UP.country = {2} 
            AND UP.state= {3} 
            AND UP.city= {4} 

它抱怨说例如UP.country中的“ RSA”列不存在。 如果我像在python 2中那样使用%s,我不会遇到相同的问题,并且不会将其作为一列读取。

我在这里想念什么?

谢谢,

我注意到内部工作原理可以肯定,但是请在周围加上“ {}”为我解决了此问题。

%s用于带有psycopg2的可变占位符。

确保正确传递参数,以便正确地对它们进行转义。

>>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct

如果将%formatting或format()与用户输入一起使用,则容易受到SQL注入的攻击。

>>> cur.execute("INSERT INTO foo VALUES (%s)" % "bar", ()) # wrong
>>> cur.execute("INSERT INTO foo VALUES ({} )".format("bar"), ()) # wrong

有关更多信息,请参阅有关将参数传递给SQL查询的文档。

请注意,Python 3中的常规字符串以及format()支持%s格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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