簡體   English   中英

使用Python變量搜索SQLite3數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM