如何无循环将NumPy数组批量插入SQLite表?现有写法报错
解决NumPy数组批量插入SQLite的问题
你的错误在于构造SQL语句时,错误生成了与数组行数相同数量的问号,导致SQL把所有行的元素当成了一行的列值,从而出现列数不匹配的报错。下面是两种正确的写法:
方法一:使用executemany(推荐)
这是SQLite官方推荐的批量插入方式,直接将NumPy数组转为列表传入即可:
# 将NumPy数组转为列表格式 arr_list = arr.tolist() # 执行批量插入 db.executemany("""INSERT INTO table(column1, column2, column3) VALUES (?, ?, ?)""", arr_list) # 提交事务 db.commit()
方法二:构造单条批量INSERT语句
如果想用单条SQL语句完成插入,需要为每一行数据生成一组(?, ?, ?),再将所有组拼接起来,同时把数组扁平化后作为参数传入:
# 生成对应行数的VALUES子句 values_clause = ", ".join(["(?, ?, ?)"] * len(arr)) # 拼接完整SQL语句 sql = f"""INSERT INTO table(column1, column2, column3) VALUES {values_clause}""" # 扁平化数组并执行插入 db.execute(sql, arr.flatten()) # 提交事务 db.commit()
注意:无论哪种方法,最后都要调用
commit()提交事务,否则插入的数据不会被持久化到数据库中。
内容的提问来源于stack exchange,提问作者Matildes
相关产品推荐
相关产品推荐

