Python中SELECT语句LIKE子句用%:匹配含test的所有记录
解决方法:匹配包含特定字符串的SQL记录
嘿,这事儿超简单!你之前用=只能精准匹配完全等于test的记录,要抓所有包含test(不管前后有啥字符)的记录,得靠SQL的LIKE操作符配合通配符%来实现,下面给你分步讲明白:
1. 基础实现(区分大小写)
把原来的=换成LIKE,并用%包裹目标字符串test——%在SQL里代表「任意数量的任意字符」(包括0个)。
重点提醒:一定要用参数化查询(别直接拼字符串!),彻底避免SQL注入风险:
import mysql.connector # 这里以MySQL为例,其他数据库写法逻辑一致 # 假设你已经完成数据库连接初始化 conn = mysql.connector.connect(host="你的主机地址", user="用户名", password="密码", database="数据库名") cursor = conn.cursor(dictionary=True) # 用dictionary=True返回字典格式结果,更易读取 search_keyword = "test" # 把通配符加到关键词两边,生成匹配模式 match_pattern = f"%{search_keyword}%" # 执行参数化查询 cursor.execute("SELECT * FROM 你的表名 WHERE model_name LIKE %s", (match_pattern,)) # 获取所有匹配的记录 matching_records = cursor.fetchall() # 遍历查看结果 for record in matching_records: print(record) # 记得关闭连接 cursor.close() conn.close()
这样就能拿到model_name是123test123、abctestabc这类包含test的所有记录了。
2. 不区分大小写的匹配
如果需要忽略大小写(比如匹配ABCtestABC、Test123这类),不同数据库有不同的简便处理方式:
- MySQL/MariaDB:用
LOWER()函数把字段和匹配模式统一转成小写:cursor.execute("SELECT * FROM 你的表名 WHERE LOWER(model_name) LIKE LOWER(%s)", (match_pattern,)) - PostgreSQL:直接用
ILIKE代替LIKE,天生支持不区分大小写匹配:cursor.execute("SELECT * FROM 你的表名 WHERE model_name ILIKE %s", (match_pattern,)) - SQL Server:可以用
COLLATE指定不区分大小写的排序规则,或者同样用LOWER()统一转小写:cursor.execute("SELECT * FROM 你的表名 WHERE model_name LIKE %s COLLATE SQL_Latin1_General_CP1_CI_AS", (match_pattern,))
3. 绝对要避开的错误写法
别图省事直接把字符串硬拼进SQL语句里,这种写法会引发SQL注入漏洞,风险极高:
# ❌ 错误示例!绝对不要这么写! cursor.execute(f"SELECT * FROM 你的表名 WHERE model_name LIKE %{search_keyword}%")
一定要依赖参数化查询,让数据库驱动帮你处理字符串转义,安全又省心。
内容的提问来源于stack exchange,提问作者Sel_Python
相关产品推荐
相关产品推荐

