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

MySQL executemany无法批量执行列表数据的问题求助

问题排查与解决方案

核心问题:逻辑运算符误用

你的mysqlconnclass中dbwrite()和dbread()方法里的条件判断用了按位与运算符&,而非Python的逻辑与运算符and。&会先将布尔值转为整数再做位运算,导致判断逻辑失效,executemany分支根本没被触发。

修复步骤

1. 修正逻辑运算符与分支结构

把isinstance(data,list) & len(data) > 0替换为isinstance(data, list) and len(data) > 0,同时将并列的if改为elif,避免无效的分支判断,新增异常捕获与执行结果验证:

修改后的dbwrite()方法:

def dbwrite(self, query, data=None):
    execute = 0
    data = data or []
    try:
        if len(data) == 0:
            self.c.execute(query)
        elif isinstance(data, dict):
            self.c.execute(query, data)
        elif isinstance(data, list) and len(data) > 0:
            self.c.executemany(query, data)
            execute = 1
            print(f"批量执行完成,影响行数:{self.c.rowcount}")
        self.connection.commit()
    except Exception as e:
        self.connection.rollback()
        print(f"数据库写入错误:{str(e)}")

修改后的dbread()方法:

def dbread(self, query, data=None):
    execute = 0
    data = data or []
    try:
        if len(data) == 0:
            self.c.execute(query)
        elif isinstance(data, dict):
            self.c.execute(query, data)
        elif isinstance(data, list) and len(data) > 0:
            self.c.executemany(query, data)
            execute = 1

        if execute == 0:
            return self.c.fetchall()
    except Exception as e:
        print(f"数据库读取错误:{str(e)}")
        return []

2. 统一字段值类型

你的查询语句用current_sub = '1'(字符串),但更新时设为False(布尔值),MySQL会自动转换类型,可能导致匹配异常。根据tickers表current_sub字段的实际类型调整:

  • 如果是CHAR/VARCHAR/ENUM类型:更新语句改为SET current_sub = '0'
  • 如果是BIT/TINYINT类型:查询语句改为WHERE current_sub = 1

3. 验证执行有效性

通过self.c.rowcount可以查看批量更新实际影响的行数,结合打印信息确认executemany是否真正执行,以及更新是否生效。

额外优化建议

  • 避免使用可变参数默认值data=[]:Python中可变默认参数会被多次调用共享,改为data=None后再初始化空列表(如上面代码所示)。
  • 添加资源释放逻辑:在类中加入__del__方法,确保对象销毁时关闭数据库连接和游标:
def __del__(self):
    if hasattr(self, 'c') and self.c:
        self.c.close()
    if hasattr(self, 'connection') and self.connection:
        self.connection.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:52:02