python:大文件分批/块导入数据库方式记录

一、问题背景

对于数据文件比较大的数据,一次性串联sql进行入库,往往会受到数据库本身对sql长度的限制,从而需要分块或者分批次,将大数据文件一点一点的进行入库。特针对这种入库方式,进行一个简单记录,各类数据库入库后续均可参考下述实现分块的方式,进行分批入库数据。

二、实现记录

问题点其实主要是如何对数据进行分块。pyhton的read_csv函数和read_excel等数据读取函数都含有分批读取数据的参数:chunksize,从而实现分批入库。

如果是已经全部读取了数据,还想再进一步分批,则可以参考下述代码进行分批读取:

python 复制代码
batch_size = 2000
total_rows = p_result_notice_mes_df.shape[0]    
total_batches = total_rows // batch_size + (1 if total_rows % batch_size > 0 else 0)
for i in range(total_batches):
        start_index = i * batch_size
        end_index = min((i + 1) * batch_size, total_rows)
        batch_df = p_result_notice_mes_df.iloc[start_index:end_index]

部分示例程序如下:

python 复制代码
third_tbname ='bods.scw_info'
    # 计算数据总数和批次数
    batch_size = 2000
    total_rows = p_result_notice_mes_df.shape[0]    
    total_batches = total_rows // batch_size + (1 if total_rows % batch_size > 0 else 0)
    if p_third_flag:
        for i in range(total_batches):
            start_index = i * batch_size
            end_index = min((i + 1) * batch_size, total_rows)
            batch_df = p_result_notice_mes_df.iloc[start_index:end_index]
       
            third_values_list = []
            cursor.execute(f"truncate table {third_tbname} ")
            # 构建批量插入的SQL语句        
            insert_query = f"""
                        INSERT into {third_tbname} (changelog_id, notice_model, notice_batch,
                                                    brand, vehicle_type, rated_quality, total_quality, 
                                                    curb_weight, fuel_type, emission_standard)        
                            VALUES 
                            """
            for index, row in batch_df.iterrows():
                third_values_list.append(f"""('{row["变记录"]}' , '{row["告"]}', '{row["公次"]}', 
                                         '{row["品牌"]}', '{row["类型"]}', '{row["额量"]}', '{row["总"]}',
                                         '{row["整量"]}', '{row["燃类"]}', '{row["排放准"]}'
                                         )""")
            
            insert_query += ',\n'.join(third_values_list)
                        
            # 执行批量插入
            cursor.execute(insert_query) 
        print('公告url信息更新入库成功!\n')  
    else:
        print('公告链接信息无需更新') 
   
相关推荐
阿华的代码王国37 分钟前
MySQL ------- 索引(B树B+树)
数据库·mysql
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
Hello.Reader1 小时前
StarRocks实时分析数据库的基础与应用
大数据·数据库
子午1 小时前
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
人工智能·python·cnn
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
风等雨归期1 小时前
【python】【绘制小程序】动态爱心绘制
开发语言·python·小程序
yanglamei19621 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
Adolf_19931 小时前
Flask-JWT-Extended登录验证, 不用自定义
后端·python·flask
冯宝宝^1 小时前
基于mongodb+flask(Python)+vue的实验室器材管理系统
vue.js·python·flask
叫我:松哥2 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap