簡體   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