zoukankan      html  css  js  c++  java
  • python批量插mysql 2种方法 对比 装饰器timer

    摘要:  

    1自动化单条insert  => 单条insert的话插入5w条数据大约用时5秒左右,相对来说效率不高

    2拼接sql语句,只执行一次insert   =>使用这种批量插入方式插入5w条数据用时大约不到1秒

    1.自动化单条insert

    # -*- coding:utf-8 -*-
    import time
    from pymysql import *
    # 装饰器,计算插入50000条数据需要的时间
    def timer(func):
        def decor(*args):
            start_time = time.time()
            func(*args)
            end_time = time.time()
            d_time = end_time - start_time
            print("the "+str(func.__name__)+" running time is : ", d_time)
    
        return decor
    
    @timer
    def add_test_users():
    
        conn = connect(host='127.0.0.1', port='3306', user='root', password='root', database='数据库名', charset='utf8')
        cs = conn.cursor()  # 获取游标
        for num in range(0, 50000):
            try:
                sql = "insert into '表名'(字段名) values(值)"
                cs.execute(sql)
            except Exception as e:
                return          
        conn.commit()  # 提交
        cs.close()
        conn.close()
        print('OK')
    
    add_test_users()

    单条insert的话插入5w条数据大约用时5秒左右,相对来说效率不高

    2.拼接sql语句,只执行一次insert

    # -*- coding:utf-8 -*-
    import time
    from pymysql import *
    
    # 装饰器,计算插入50000条数据需要的时间
    def timer(func):
        def decor(*args):
            start_time = time.time()
            func(*args)
            end_time = time.time()
            d_time = end_time - start_time
            print("the running time is : ", d_time)
    
        return decor
    
    @timer
    def add_test_users():
        
        usersvalues = []
        for num in range(1, 50000):
            usersvalues.append(('zhangsan','23'))  # 注意要用两个括号扩起来
    
        conn = connect(host='127.0.0.1', port='3306', user='root', password='root', database='数据库名', charset='utf8')
        cs = conn.cursor()  # 获取光标
        # 注意这里使用的是executemany而不是execute,下边有对executemany的详细说明
        cs.executemany('insert into '表名'(name,age) values(%s,%s)', usersvalues)
        conn.commit()
        cs.close()
        conn.close()
        print('OK')
    add_test_users()

    原文: https://blog.csdn.net/weixin_42703149/article/details/85120029

  • 相关阅读:
    BZOJ 1907: 树的路径覆盖
    BZOJ 1295: [SCOI2009]最长距离
    BZOJ 1303: [CQOI2009]中位数图
    BZOJ 1468: Tree
    BZOJ 3784: 树上的路径
    BZOJ 2006: [NOI2010]超级钢琴
    BZOJ 1831: [AHOI2008]逆序对
    BZOJ 2521: [Shoi2010]最小生成树
    HDU 6685 Rikka with Coin (枚举 思维)
    HDU 6659 Acesrc and Good Numbers (数学 思维)
  • 原文地址:https://www.cnblogs.com/lshan/p/15348797.html
Copyright © 2011-2022 走看看