data_merge数据库合并

本文介绍了使用pymysql库进行大规模数据迁移的过程。通过设置批处理大小,优化了数据插入性能,减少了数据库操作时间。文章详细展示了如何从一个数据库连接获取数据,分批插入到另一个数据库,并记录了各步骤的耗时,为数据库维护和数据同步提供了实战参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import pymysql
import time

if __name__ == '__main__':

    scs_db = pymysql.connect(host='XXXXXXXXXX',
                             port=XXXXXXXXXX,
                             user='XXXXXXXXXX',
                             password='XXXXXXXXXX',
                             db='XXXXXXXXXX',
                             charset='utf8mb4')

    select_sql = """select id + 40000, `name`, origin, create_user, create_time, update_time, 
    recommend_flag, recommend_weight, delete_status, picture_url, `explain`, explain_picture_url from c_topic"""
    scs_cursor = scs_db.cursor()
    scs_record = scs_cursor.execute(select_sql)
    print('总条数:', int(scs_record))

    # database
    scs_bak_db = pymysql.connect(host='XXXXXXXXXX',
                                 port=XXXXXXXXXX,
                                 user='XXXXXXXXXX',
                                 password='XXXXXXXXXX',
                                 db='XXXXXXXXXX',
                                 charset='utf8mb4')
    scs_bak_cursor = scs_bak_db.cursor()
    insert_sql = """insert into c_topic(id, `name`, origin, create_user, create_time, update_time, 
    recommend_flag, recommend_weight, delete_status, picture_url, `explain`, explain_picture_url, read_count) 
    values(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 0)"""

    fetch_many_start_time = time.time()
    try:
        # 每次执行1w条
        num = 100
        for i in range(int(scs_record / num)):
            print(i)
            _1 = time.time()
            batch_scs_data = scs_cursor.fetchmany(num)
            _2 = time.time()
            print('1:', str(_2 - _1))
            scs_bak_cursor.executemany(insert_sql, batch_scs_data)
            _3 = time.time()
            print('2:', str(_3 - _2))

        print('批次数据执行时间:', str(time.time() - fetch_many_start_time))

        fetch_all_start_time = time.time()
        # 剩下的一次性执行完
        last_scs_data = scs_cursor.fetchall()
        _4 = time.time()
        print('4:', str(_4 - _3))
        scs_bak_cursor.executemany(insert_sql, last_scs_data)
        _5 = time.time()
        print('5:', str(_5 - _4))
        print('剩余数据执行时间:', str(time.time() - fetch_all_start_time))

        scs_bak_db.commit()
    finally:
        scs_db.close()
        scs_bak_db.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值