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