[英]Search SQLite3 database using a Python variable
我正在嘗試使用pythonic變量作為搜索詞來搜索我的SQLite3數據庫。 我要搜索的術語是數據庫中單元格內容的一部分(例如,單元格中的Smith:[Harrison GB, Smith JH]),並且通常位於單元格中字符串的中間。
我嘗試將其編碼如下所示:
def read_from_db():
c.execute("SELECT authors, year, title, abstract FROM usertable WHERE authors LIKE (?)",(var1,))
data = c.fetchall()
print(data)
for row in data:
searchlist.append(row)
var1="Smith"
read_from_db()
這應該逐行顯示結果。 但是,當var1 =“ Smith ”時,我得到0個結果。 當我將其值更改為“ Harrison GB,Smith JH ”時, 我得到了所有結果。
當我嘗試通過更改SQLite3執行查詢來解決它時,出現錯誤。
ERROR
c.execute("SELECT authors, year, title, abstract FROM usertable WHERE authors LIKE '%?%'",(var1,))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.
如果將結尾更改為$?$,(%?%)等,則會出現語法錯誤。
...authors="%?%"
但這也不起作用。 SO上也有一些類似的問題,但它們並不能完全解決我的問題...
我在Windows 10上運行Python 3.4和SQLite3。
考慮將%
通配符連接到綁定值var1
:
c.execute("SELECT authors, year, title, abstract" +
" FROM usertable WHERE authors LIKE (?)", ('%'+var1+'%',))
您需要這樣做的原因是?
占位符在參數化查詢中替換字符串文字,對於LIKE
表達式,帶有值的通配符一起是字符串文字,如用其單引號引起來:
SELECT authors, year, title, abstract FROM usertable WHERE authors LIKE '%Smith%'
您最初的嘗試失敗了,因為您換行了?
用單引號引起來,並且光標無法將參數正確綁定到准備好的語句,因此該符號從字面上被視為問號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.