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

Python脚本运行无报错但无法向MySQL插入数据求助

解决MySQL插入无数据但无报错的问题

看起来你的代码能正常运行不报错,但数据就是没写入数据库,我帮你梳理几个核心问题和修复方案:

1. 未切换到目标数据库

你代码里的select_db = ("")是空的,这意味着数据库连接后没有切换到包含api_keys表的目标库。MySQL连接默认会进入mysql系统库,后续的插入操作其实是在这个系统库执行的——而你的业务表显然不在这儿,所以执行时不会报错,但也不会有数据写入到你期望的表中。

修复方案:
要么明确切换数据库:

select_db = "USE your_target_database;"  # 替换成你的实际数据库名
cursor.execute(select_db)

要么在建立连接时直接指定数据库(更推荐):

conn = mysql.connector.connect(
    user=dbUser,
    password=dbPassword,
    host=host,
    database="your_target_database",  # 直接指定业务数据库
    buffered=True
)

2. 检查变量定义与SQL构造

你的插入语句用到了api_token、email、ownerPartyID、salesStatus这些变量,但你提供的代码片段里没看到它们的定义。如果这些变量未正确初始化(比如未定义或值不符合字段要求),理论上会抛出NameError,但如果是在代码其他部分定义的,要确保它们的类型、长度符合api_keys表的字段约束。

另外,你用字符串拼接构造filter_query的方式存在风险,容易因特殊字符导致SQL语法隐性错误,建议改成参数化写法:

# 把过滤条件也作为参数传入插入语句,避免拼接错误和SQL注入
filter_query = "(OwnerPartyID:%s) AND (SalesStatus:%s)" % (ownerPartyID, salesStatus)

3. 主键冲突或字段约束问题

你硬编码了api_keys_id = 170,如果api_keys表的api_keys_id是主键,且这个ID已经存在于表中,MySQL会抛出主键冲突错误,但你说没报错,可能这个ID不存在,或者主键不是这个字段?可以先查询表结构确认:

DESCRIBE api_keys;

如果是主键冲突,建议改成自增逻辑(如果表设置了自增),或者动态获取最新ID:

cursor.execute("SELECT MAX(api_keys_id) FROM api_keys")
max_id = cursor.fetchone()[0]
api_keys_id = max_id + 1 if max_id is not None else 1

4. 确认事务提交有效性

虽然你写了conn.commit(),但隐性的连接问题或未处理的事务可能导致提交失败。建议添加异常捕获,明确执行结果:

try:
    cursor.execute(*add_api_key)
    conn.commit()
    print("数据插入成功!")
except mysql.connector.Error as err:
    print(f"插入出错: {err}")
    conn.rollback()

最后,执行插入前可以打印完整的SQL语句和参数,确认所有值都是符合预期的:

print("插入语句模板:", add_api_key[0])
print("插入参数:", add_api_key[1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:44:08