簡體   English   中英

Python3:使用變量處理sqlite3 SELECT

[英]Python3: dealing with sqlite3 SELECT using variables

我嘗試使用LIKE參數獲取SQL選擇,但是它僅提供了我的選擇:

false,"error_code":400,"description":"Bad Request: Message text is empty"

這是我的代碼:

textvar = message.text 
c.execute("SELECT * FROM run WHERE act LIKE '+textvar+'")
res = c.fetchone() 
bot.send_message(message.chat.id, res)

print textvar給我一個預期的sting ,取自message.text 我試圖在沒有LIKE情況下獲取一些數據,而且看來其他一切工作都很好。

我究竟做錯了什么?

您正在測試在act列中是否存在字符串'+textvar+'不是來自變量textvar !的值)。 沒有這樣的列。

不要使用字符串插值法將變量插入SQL查詢中,因為這樣會使您更容易受到SQL注入攻擊。 使用查詢參數:

textvar = '%{}%'.format(message.text)
c.execute("SELECT * FROM run WHERE act LIKE ?", (textvar,))

請注意,我確實使用字符串插值將% 通配符添加到字符串中,以確保LIKE 在列中的任何位置搜索文本。 沒有通配符, LIKE只不過是一個相等性測試。 %匹配0個或多個任意字符, _恰好匹配1個任意字符。 請參閱LIKE操作員文檔

因此,對於您的示例文本'sting' ,上面的代碼生成字符串'%sting%' ,然后數據庫適配器負責正確的引用並執行SELECT * FROM run WHERE act LIKE '%sting%' SQL查詢您的數據庫。 其中任何行act包含sting將匹配並返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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