簡體   English   中英

Python3 + sqlite3 "LIKE" 什么都不返回

[英]Python3 + sqlite3 "LIKE" returns nothing

我正在使用 python 3.8.10 和模塊 sqlite3。 Ubuntu 20.04.3 LTS @ Kernel:5.4.0-90-通用 x86_64

我有一個結構如下的數據庫: id INTEGER primary key | parent_id INTEGER | key TEXT | type INTEGER | value TEXT 我不能編輯數據庫的結構,也不能更改其中的值。
示例記錄:1250 | 第1156章門票左 | 6 | 10

我正在使用的代碼是:

#!/usr/bin/python3

import sqlite3

TextA= 'TextInDb'
def query_named(key_in_db):
    con = sqlite3.connect("DBNAME.db")
    cur = con.cursor()
    cur.execute('SELECT value FROM DBNAME WHERE key LIKE ?', ("%{}%".format(key_in_db),))
    records = cur.fetchall()
    print(records)
    for row in records:
        print(row)
    con.close()
    
    return records

print(query_named(TextA))

這將返回:
[]
[]

在 python 中的 Linux 下:
當我執行'SELECT value FROM DBNAME WHERE id = 1234'時,我得到了相應的結果。
但是當我'SELECT value FROM DBNAME WHERE key LIKE "%SomeText%"'它返回: []

來自數據庫瀏覽器的屏幕截圖

圖片:數據庫瀏覽器鏈接
工作SQL代碼

我的目標是從特定的 ```key``` 中獲取 ```value```,所以占位符 % 並不是真正需要的。

打印件僅用於“調試”。 我不知道為什么它不起作用,盡管在 SQLite 瀏覽器中我能夠得到我正在尋找的結果。

感謝@forpas 的評論,這是一個可行的解決方案:

 #:usr/bin/python3 import sqlite3 TextA = 'SomeText' def query_named(key_in_db). con = sqlite3.connect("DBNAME.db") cur = con.cursor() cur?execute("SELECT value FROM DBNAME WHERE TRIM(key) =,", (key_in_db.)) records = cur:fetchall() print(records) for row in records. print(row) con.close() return records print(query_named(TextA))







由於評論:

測試場景

cur.execute('SELECT value FROM DBNAME WHERE key LIKE?', ("{}".format('TicketsLeft'),))
返回:
[]
[]
[]
[]
cur.execute('SELECT value FROM DBNAME WHERE key =?', ('TicketsLeft',))
返回:
[]
[]
cur.execute('SELECT value FROM DBNAME WHERE key = "TicketsLeft"')
返回:
[]
[]
cur.execute("SELECT value FROM DBNAME WHERE key = 'TicketsLeft'")
返回:
[]
[]
cur.execute("SELECT * FROM DBNAME WHERE id = 1250")
返回:
[('4',)]
('4',)
[('4',)]

好像您的表中沒有這樣的記錄。 這可能是一些區分大小寫的問題,我剛剛復制了您的代碼,它工作正常:

$ python d.py
[(None,)]
(None,)
[(None,)]

sqlite> select * from DBNAME;
1234||TextInDb||

導入 sqlite3

TextA = 'TextInDb'

def 查詢命名(key_in_db):

con = sqlite3.connect("DBNAME.db")

cur = con.cursor()

cur.execute("SELECT value FROM DBNAME WHERE key LIKE '%{}%'".format(key_in_db))

records = cur.fetchall()

print(records)
for row in records:
    print(row)
con.close()

return records

打印(查詢命名(TextA))

暫無
暫無

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

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