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

Python3使用mysql-connector查询MySQL今日及之后数据问题

修正方案:获取今日及之后的数据库数据

我来帮你梳理代码里的问题,主要有几个关键地方需要调整,才能正常实现需求:

1. 日期格式的问题

你当前生成日期的方式会导致月份/日期为个位数时缺少前导零(比如9月会变成"9"而不是"09"),这会让SQL的日期比较出现错误(字符串层面"2024-9-5"会被认为大于"2024-10-1")。可以用time.strftime直接生成标准的YYYY-MM-DD格式:

todaysdate = time.strftime("%Y-%m-%d", time.gmtime())

或者用datetime模块更直观:

from datetime import date
todaysdate = date.today().isoformat()

2. SQL参数传递的错误

cur.execute的第二个参数需要是元组,但你写的(todaysdate)只是一个普通的字符串,不是元组。单个元素的元组必须加逗号,否则会被解析成字符串本身,导致SQL参数匹配失败:

cur.execute(selDBcmd, (todaysdate,))  # 注意末尾的逗号

3. 查询结果的格式化问题

cur.fetchall()返回的是一个包含元组的列表,直接发送这个列表会让消息格式非常不友好,需要把结果拼接成易读的字符串:

msg = 'homework:\n\n'
selDBc = cur.fetchall()
if selDBc:
    for ut, sj, hw in selDBc:
        msg += f"时间: {ut}\n科目: {sj}\n作业: {hw}\n\n"
else:
    msg += "今日及之后暂无作业数据哦~"
await client.send_message(message.channel, msg.strip())

完整修正后的代码

import time

# 获取标准格式的今日日期
todaysdate = time.strftime("%Y-%m-%d", time.gmtime())

# 构造SQL查询语句
selDBcmd = "SELECT UT, SJ, HW FROM `homework` WHERE DATE(UT) >= %s;"
cur.execute(selDBcmd, (todaysdate,))

# 格式化查询结果
msg = 'homework:\n\n'
selDBc = cur.fetchall()
if selDBc:
    for ut, sj, hw in selDBc:
        msg += f"UT: {ut}\nSJ: {sj}\nHW: {hw}\n\n"
else:
    msg += "当前没有今日及之后的作业数据~"

# 发送格式化后的消息
await client.send_message(message.channel, msg.rstrip())

另外补充一点:不同的数据库驱动对DATE函数的支持可能略有差异,比如MySQL的DATE()函数可以直接用,但如果是SQLite,需要确保UT字段是日期类型或者可以被DATE()函数解析的字符串格式。如果你的UT字段是时间戳,可能需要用对应的函数转换,比如SQLite的DATE(UT, 'unixepoch')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:09:04