有沒有辦法在sqlite3中設置查詢的佔位符? 我有一些與數據庫一起工作的函數,如果它們可以同時使用mysql和sqlite,它會更令人滿意。 Mysql和Postgres python apis使用%s作爲佔位符,但sqlite3使用問號代替。Python的sqlite3的佔位符
我正在尋找一種方法來使用相同的佔位符無論數據庫引擎。
感謝您的幫助。
有沒有辦法在sqlite3中設置查詢的佔位符? 我有一些與數據庫一起工作的函數,如果它們可以同時使用mysql和sqlite,它會更令人滿意。 Mysql和Postgres python apis使用%s作爲佔位符,但sqlite3使用問號代替。Python的sqlite3的佔位符
我正在尋找一種方法來使用相同的佔位符無論數據庫引擎。
感謝您的幫助。
更新來解決我前面關於如何使用paramstyle
全球
如果使用DB模塊遵循Python Database API Specification v2.0錯誤,就可以得到模塊全球paramstyle
這應該是任何一個:
然後,您可以使用模塊使用的佔位符組合SQL語句。你可以這樣做:
import sqlite3
paramstyle = sqlite3.paramstyle
if paramstyle == 'qmark':
ph = "?"
elif paramstyle == 'format':
ph = "%s"
else:
raise Exception("Unexpected paramstyle: %s" % paramstyle)
sql = "INSERT INTO foo VALUES (%(ph)s, %(ph)s, %(ph)s)" % { "ph" : ph }
PEP沒有提到*設置*它。事實上,PEP將其描述爲**常數**。 –
哦,你一定是對的。作爲我,我會試試看,但你很可能是正確的。 – 2012-08-29 18:30:07
是的,你的答案是正確的,你必須閱讀價值並據此撰寫他的陳述,而不是更新全球。 – 2012-08-29 18:35:55
底層庫doesn't support %s
,所以它需要手動替換。可能更容易檢查paramstyle
屬性,並用適當的值替換查詢中不同佔位符的所有實例。
我明白了。我將創建一個函數,用%s將查詢轉換爲帶問號的查詢。然而,這聽起來並不容易。我無法找到sqlite如何逃脫?本身。 –
我用一些代碼更新了我的答案,以使您的SQL「佔位符不可知」。 – 2012-08-30 10:01:16