繁体   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