我試圖返回查詢得到與像varibale字符串開頭的所有記錄我有 ,所以我這樣做:SQL字符串替換錯誤沒有足夠的論據格式字符串
"""select name from pos_order where name like '%s'||'%' order by id DESC limit 1"""%(darsh[0])
其中darsh
是類似的東西'mostafa/'
,但它一直告訴我not enough arguments for format string
我不知道爲什麼。
我試圖返回查詢得到與像varibale字符串開頭的所有記錄我有 ,所以我這樣做:SQL字符串替換錯誤沒有足夠的論據格式字符串
"""select name from pos_order where name like '%s'||'%' order by id DESC limit 1"""%(darsh[0])
其中darsh
是類似的東西'mostafa/'
,但它一直告訴我not enough arguments for format string
我不知道爲什麼。
Python試圖在SQL中替換'%'字符。但它只有一個值 - darsh [0] - 才能使用。因此,錯誤消息,它試圖填寫兩個值,但你只給它一個。
爲了證明這一點,躲過第二%%,使您的發言
「」 「選擇pos_order name其中name LIKE '%s' 的|| '%%' ORDER BY ID DESC極限1」 「」 %(darsh [0])
但不要做到這一點 - 它會讓你容易受到SQL注入。例如,如果數據庫中有一個名爲DO_BAD_THING的函數,惡意用戶可以使用精心設計的輸入字符串來執行該函數。
正確的答案是使用綁定變量,看這個問題:
question about postgresql bind variables
有關如何做到這一點的例子。
對於強調 - 不要使用字符串連接的SQL 任何東西其中最終用戶可以操縱字符串。
謝謝你有幫助:) –
,有必要逃避%
與另一%
像%%
"""select name from pos_order where name like '%s'||'%%' order by id DESC limit 1"""%(darsh[0])
但是,這是不好的做法,因爲它開啓了大門,SQL注入。當您使用Psycopg使用cursor.method
參數傳遞:
cursor.execute("""
select name
from pos_order
where name like %s||'%%'
order by id DESC
limit 1
""", (darsh[0],)
)
的綁定引用公認的答案被用於準備語句這是不是你的情況。
謝謝你有幫助:) –
請勿使用字符串操作將數據添加到查詢中。改用查詢參數。 –
沒有得到它?你什麼意思 ? –
如果您使用的是psycopg2:http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries特別是紅色框中的一些屏幕。 –