You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3调用sqlite3执行LIKE查询无返回结果的问题排查与解决

环境说明
  • Python版本:3.8.10
  • 依赖模块:sqlite3
  • 运行环境:Ubuntu 20.04.3 LTS,内核版本5.4.0-90-generic x86_64
数据库说明

当前操作的数据库表结构如下,无权限修改库结构及内部存储数据:

字段名类型说明
idINTEGER主键
parent_idINTEGER父级ID
keyTEXT键名
typeINTEGER类型
valueTEXT值

示例记录:1250 | 1156 | TicketsLeft | 6 | 10

初始代码与问题

需求为根据指定key查询对应的value,不需要使用模糊匹配占位符%,初始实现代码如下:

#!/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环境执行按ID查询的SQL SELECT value FROM DBNAME WHERE id = 1234可以正常拿到结果
  • 按key字段匹配的SQL执行后均返回空
  • 相同SQL在DB Browser工具中可以正常执行拿到预期结果
测试验证

针对key匹配问题做了多轮测试:

  1. 执行cur.execute('SELECT value FROM DBNAME WHERE key LIKE ?', ("{}".format('TicketsLeft'),)),返回空数组
  2. 执行cur.execute('SELECT value FROM DBNAME WHERE key = ?', ('TicketsLeft',)),返回空数组
  3. 执行cur.execute('SELECT value FROM DBNAME WHERE key = "TicketsLeft"'),返回空数组
  4. 执行cur.execute("SELECT value FROM DBNAME WHERE key = 'TicketsLeft'"),返回空数组
  5. 执行cur.execute("SELECT * FROM DBNAME WHERE id = 1250"),正常返回[('4',)]
解决方案

问题根因为存储的key字段首尾存在不可见空白字符,使用SQLite内置的TRIM()函数清理key字段的首尾空白后即可正常匹配,修复后可用代码如下:

#!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))

内容的提问来源于stack exchange,提问作者Oxieth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:45:00