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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:58:27