如何在Python3的SQLite3中查询包含可变子串的所有行?
在SQLite3中用变量实现LIKE模糊查询的正确方式
我懂你的痛点——直接用?占位符套变量的时候,没法自动带上LIKE需要的通配符,导致查询达不到预期效果对吧?其实问题出在通配符的处理上,咱们换个方式就能解决:
核心思路:把通配符和变量拼接后作为参数传入
不要在SQL语句里写%?%(这样SQLite会把?当成字符串的一部分,而不是占位符),而是先在Python代码里把通配符%和你的搜索变量拼接成完整的匹配模式,再通过?占位符传入,这样既保证了SQL注入安全,又能实现模糊查询。
完整代码示例
import sqlite3 # 你的搜索变量,替换成实际需要的值 search_term = "this_is_a_hard_coded_string" # 拼接通配符,构建LIKE需要的匹配模式 like_pattern = f"%{search_term}%" # 连接数据库并执行查询 conn = sqlite3.connect("your_database.db") cursor = conn.cursor() # 使用参数化查询,把拼接好的模式传进去 cursor.execute( "SELECT * FROM userTable WHERE UPPER(column) LIKE UPPER(?)", (like_pattern,) # 注意这里是元组,即使只有一个参数也要加逗号 ) # 获取结果并处理 matching_rows = cursor.fetchall() for row in matching_rows: print(row) # 关闭连接 conn.close()
额外说明
- 大小写处理:如果需要忽略大小写匹配,除了在SQL里用
UPPER()包裹列和参数,你也可以直接在Python里把搜索变量转成大写,这样SQL语句可以简化成WHERE UPPER(column) LIKE ?,效果是一样的。 - 安全提醒:绝对不要直接把变量拼接到SQL字符串里(比如
cursor.execute(f"SELECT ... LIKE '%{search_term}%'")),这种写法会引入SQL注入风险,参数化查询才是安全的标准做法。
内容的提问来源于stack exchange,提问作者Mr. Hax
相关产品推荐
相关产品推荐

