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

Python中MySQL查询使用时间戳变量报错,求解决方案

解决Python中MySQL查询使用时间戳变量的问题

你的问题很典型——直接把Python变量名写进SQL字符串里,MySQL会把它当成表的列名,而不是你要传入的数值,这就是为什么会报Unknown column 'tsmin' in 'where clause'错误。下面给你两种解决办法,优先推荐第一种:

1. 使用参数化查询(推荐,安全且规范)

这是操作数据库时传递变量的标准方式,既能解决变量传递问题,还能防止SQL注入攻击。不同的MySQL Python驱动(比如MySQLdb、pymysql)通常用%s作为参数占位符,执行时把变量作为第二个参数传给cursor.execute():

tsmin = 1527573750
tsmax = 1527574050
# 用%s作为占位符,不要加引号
command = "SELECT * FROM #CMD# WHERE data.#CMD#.TimesTamp BETWEEN FROM_UNIXTIME(%s) AND FROM_UNIXTIME(%s)"
# 执行时传入变量元组
cursor.execute(command, (tsmin, tsmax))

驱动会自动帮你处理变量的类型转换和字符串转义,完全不用手动拼接字符串。

2. 字符串格式化(不推荐,有SQL注入风险)

如果只是测试场景,或者确定变量是安全的(比如不是用户输入),可以用Python的字符串格式化把变量值直接替换进SQL语句:

方法一:f-string(Python 3.6+)

tsmin = 1527573750
tsmax = 1527574050
command = f"SELECT * FROM #CMD# WHERE data.#CMD#.TimesTamp BETWEEN FROM_UNIXTIME({tsmin}) AND FROM_UNIXTIME({tsmax})"

方法二:str.format()

tsmin = 1527573750
tsmax = 1527574050
command = "SELECT * FROM #CMD# WHERE data.#CMD#.TimesTamp BETWEEN FROM_UNIXTIME({0}) AND FROM_UNIXTIME({1})".format(tsmin, tsmax)

⚠️ 注意:这种方法绝对不要用于处理用户输入的变量,恶意用户可以通过构造特殊值来执行任意SQL语句(SQL注入),导致数据泄露或破坏。


内容的提问来源于stack exchange,提问作者JensVDH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:00:56