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

无法从MySQL获取数据:Discord Bot代码fetch返回None问题排查

问题分析与解决

1. 缺少json模块导入

代码中使用了json.dumps但未导入json模块,会触发NameError导致函数异常退出,无法正常返回结果。需要在代码开头添加:

import json

2. save函数的UPDATE逻辑缺陷

如果目标表test中不存在id=1的记录,UPDATE语句不会自动创建新记录,导致fetch时找不到对应数据。建议改用REPLACE INTO语句,确保无论记录是否存在都能写入数据:

# 替换save函数中的UPDATE语句
cursor.execute(f"REPLACE INTO {table} (id, json_data) VALUES (1, %s)", (json_data,))

3. JSON数据处理错误

json.dumps(str(data))会先把字典转成字符串(比如{"a":"b"}变成"{'a': 'b'}")再序列化,导致存储的数据是字符串的JSON而非原始字典的JSON。正确写法是直接序列化字典:

json_data = json.dumps(data)

4. 未定义check_table函数

save函数中调用了check_table(table)但未实现该函数,会触发NameError导致保存操作失败,数据根本没写入数据库。要么实现该函数(比如检查表是否存在,不存在则创建),要么直接删除这个调用(如果表已提前创建)。

5. finally块的异常风险

如果数据库连接失败(比如conn未创建成功),finally块中调用cursor.close()或conn.close()会触发AttributeError,导致函数无法正常返回值。可以修改finally块,先判断对象是否存在:

finally:
    if 'cursor' in locals() and cursor is not None:
        cursor.close()
    if 'conn' in locals() and conn is not None:
        conn.close()

为什么输出None?

如果save过程中因为上述错误(比如check_table未定义)触发异常,数据根本没写入数据库,fetch时result为None,原本应该返回{},但如果函数因为未捕获的异常(比如缺少json模块)提前退出,就会返回None。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:52:44