Python操作MySQL时如何正确将日期变量传入SQL查询语句
错误原因
你原来的写法直接把Python变量名dt写在SQL语句字符串中,MySQL执行时会将dt识别为SQL层面的字段而非你定义的Python日期变量,同时通配符%的拼接逻辑也不符合参数传递规则。
正确写法(推荐参数化查询,可避免SQL注入风险)
不同Python MySQL驱动的参数占位符大多为%s(mysql-connector、pymysql均适用),你可以选择以下任意一种方式实现:
方式1:提前拼接带通配符的参数
# 若未导入对应模块需先执行导入 from datetime import date, timedelta dt = date.today() - timedelta(days=5) # 拼接日期和LIKE所需的通配符 query_param = f"{dt}%" # 占位符%s对应传入的参数,参数需以元组格式传递,单参数末尾需加逗号 mycursor.execute( "SELECT msisdn,prefix FROM sms WHERE datum_primanja LIKE %s", (query_param,) )
方式2:在SQL中拼接通配符
from datetime import date, timedelta dt = date.today() - timedelta(days=5) # SQL中%需要转义为两个%,用CONCAT函数拼接日期和通配符 mycursor.execute( "SELECT msisdn,prefix FROM sms WHERE datum_primanja LIKE CONCAT(%s, '%%')", (dt,) )
注意事项
- 禁止直接用Python字符串格式化拼接SQL语句(比如
f"SELECT ... LIKE '{dt}%'"),该写法存在SQL注入风险,安全性极低。 - 传入参数必须封装为元组,哪怕只有一个参数也要在末尾加逗号,否则会被识别为单个变量而非参数元组,导致执行报错。
内容的提问来源于stack exchange,提问作者ekvador
相关产品推荐
相关产品推荐

