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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:18:02