我正在使用 python 3.8.10 和模塊 sqlite3。Ubuntu 20.04.3 LTS @ 內核:5.4.0-90-generic 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 代碼
我的目標是從特定的“鍵”中獲取“值”,因此并不真正需要占位符 %。
列印僅用于“除錯”。我不知道為什么它不起作用,盡管在 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', )]
uj5u.com熱心網友回復:
您的表中似乎沒有這樣的記錄。這可能是一些區分大小寫的問題,我只是復制了您的代碼并且它作業正常:
$ python d.py
[(None,)]
(None,)
[(None,)]
sqlite> select * from DBNAME;
1234||TextInDb||
uj5u.com熱心網友回復:
匯入 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
列印(查詢命名(文本A))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363309.html
