Django项目中导入Pandas DataFrame至SQLite3表无更新且无报错
解决Pandas DataFrame写入SQLite3表无更新且无报错的问题
未提交事务:SQLite连接默认不会自动提交事务,
to_sql执行后需要手动提交并关闭连接,否则数据不会写入磁盘。在df.to_sql后添加:cnx.commit() cnx.close()检查列名匹配:确保DataFrame的列名与SQLite表
daos_transaction的字段名完全一致(包括大小写),如果列名不匹配,Pandas会忽略不匹配的列,可能导致写入无效果但无报错。优化日期处理逻辑:原代码循环修改DataFrame的方式效率低且可能触发警告,改用Pandas内置的字符串处理方法:
df['date_time'] = df['date_time'].str.replace('T', ' ').str.split('+').str[0] df['date_time'] = pd.to_datetime(df['date_time'])验证DataFrame数据:在写入前确认CSV数据是否正确读取,执行以下代码检查:
print(df.shape) # 查看行数和列数 print(df.head()) # 查看前5条数据如果输出行数为0,说明CSV文件为空或读取逻辑有问题。
添加错误捕获:为排查隐性错误,添加异常捕获逻辑:
try: df.to_sql('daos_transaction', cnx, if_exists='append', index=False) # 避免写入默认索引列 cnx.commit() print("数据写入成功") except Exception as e: print(f"写入失败,错误信息: {str(e)}") cnx.rollback() finally: cnx.close()
修正后的完整代码
import pandas as pd import sqlite3 # 读取CSV数据 df = pd.read_csv("correct/path/to/csv/file") # 格式化日期字段 df['date_time'] = df['date_time'].str.replace('T', ' ').str.split('+').str[0] df['date_time'] = pd.to_datetime(df['date_time']) # 连接SQLite数据库并写入数据 cnx = sqlite3.connect('correct/path/to/db') try: df.to_sql('daos_transaction', cnx, if_exists='append', index=False) cnx.commit() print("数据成功写入表daos_transaction") except Exception as e: print(f"写入出错: {str(e)}") cnx.rollback() finally: cnx.close()
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

