python数据库批量插入数据的实现(executemany的使用)


Posted in Python onApril 30, 2021

正常情况下往数据库多张表中批量插入1000条数据,若一条一条insert插入,则调用sql语句查询插入需要执行几千次,花费时间长

现使用cursor.executemany(sql,args) ,可对数据进行批量插入,
其中args是一个包含多个元组的list列表,每个元组对应mysql当中的一条数据

以下是实例:
往数据库中的order表、order_detail表和pay表中插入1000条订单数据,订单详情数据以及支付数据
1.pay表中的id字段是order表中的pay_id字段
2.order表中的id字段是order_detail表中的order_id字段

1.初始化属性(包括host、port、user、password和database)

def __init__(self):
        self.__db_host=XXX
        self.__db_port=XXX
        self.__db_user=XXX
        self.__db_password=XXX
        self.__db_database=XXX

2.连接数据库

def isConnection(self):
        self.__db=pymysql.connect(
            host=self.__db_host,
            port=self.__db_port,
            user=self.__db_user,
            password=self.__db_password,
            database=self.__db_database,
            charset='utf8'
        )

3.批量往pay表中插入1000条数据

# 插入数据进pay表
    def pay_insert(self,pay_value):
        try:
            # 连接数据库
            self.isConnection()
            # 创建游标
            global cursor
            cursor=self.__db.cursor()
            # 执行
            cursor.executemany('insert into `pay表`(type,pay_money,pay_time,pay_no,STATUS,create_by,create_time,update_by,update_time) value (%s,%s,%s,%s,%s,%s,%s,%s,%s)',pay_value)
        except Exception as e:
            print e
        finally:
            cursor.close()
            self.__db.commit()
            self.__db.close()

    # 生成pay表所需字段,并调用sql
    def pay_data(self):
        pay_value=list()
        for i in range(1,1000):
            pay_value.append((0,8800,time.localtime(),str(random.randint(712300000000,712399999999)),3,49338,time.localtime(),49338,time.localtime()))
        now_time=time.localtime()
        self.pay_insert(pay_value)
        return now_time

4.pay表中生成的1000条数据,依次取出id

# 获取pay_id
    def get_pay_id(self,now_time):
        try:
            self.isConnection()
            global cursor
            cursor=self.__db.cursor()
            cursor.execute('select id from `pay表` where create_time >= %s',now_time)
            id_value=list()
            for i in range(1,1000):
                pay_id=cursor.fetchone()
                id_value.append(pay_id)
            return id_value
        except Exception as e:
            print e
        finally:
            cursor.close()
            self.__db.commit()
            self.__db.close()

 以下是完整代码:

# #!/usr/bin/python
# # -*- coding: UTF-8 -*-


import pymysql          # 先pip install pymysql
import random
import time

class DatabaseAcess:
    # 初始化属性(包括host、port、user、password和database)
    def __init__(self):
        self.__db_host=XXX
        self.__db_port=XXX
        self.__db_user=XXX
        self.__db_password=XXX
        self.__db_database=XXX

    # 连接数据库
    def isConnection(self):
        self.__db=pymysql.connect(
            host=self.__db_host,
            port=self.__db_port,
            user=self.__db_user,
            password=self.__db_password,
            database=self.__db_database,
            charset='utf8'
        )


    # 插入数据进pay表
    def pay_insert(self,pay_value):
        try:
            # 连接数据库
            self.isConnection()
            # 创建游标
            global cursor
            cursor=self.__db.cursor()
            # 执行
            cursor.executemany('insert into `pay表`(type,pay_money,pay_time,pay_no,STATUS,create_by,create_time,update_by,update_time) value (%s,%s,%s,%s,%s,%s,%s,%s,%s)',pay_value)

        except Exception as e:
            print e
        finally:
            cursor.close()
            self.__db.commit()
            self.__db.close()


    # 生成pay表所需字段,并调用sql
    def pay_data(self,data_number):
        pay_value=list()
        for i in range(1,data_number):
            pay_value.append((0,8800,time.localtime(),str(random.randint(712300000000,712399999999)),3,49338,time.localtime(),49338,time.localtime()))
        now_time=time.localtime()
        self.pay_insert(pay_value)
        return now_time


    # 获取pay_id
    def get_pay_id(self,now_time,data_number):
        try:
            self.isConnection()
            global cursor
            cursor=self.__db.cursor()
            cursor.execute('select id from `pay表` where create_time >= %s',now_time)
            id_value=list()
            for i in range(1,data_number):
                pay_id=cursor.fetchone()
                id_value.append(pay_id)
            return id_value
        except Exception as e:
            print e
        finally:
            cursor.close()
            self.__db.commit()
            self.__db.close()


    # 插入数据进order表
    def order_insert(self,order_value):
        try:
            self.isConnection()
            global cursor
            cursor=self.__db.cursor()
            cursor.executemany('insert into `order表` (student_name,student_id,school_id,school_name,tel,height,sex,pay_id,order_no,status,original_price,payment_price,order_type,create_by,create_time,update_by,update_time,purchase_id,dept_id,sub_order_mid,class_name,shoe_size,student_no,weight) value (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',order_value)
        except Exception as e:
            print e
        finally:
            cursor.close()
            self.__db.commit()
            self.__db.close()


    # 生成order表所需字段,并调用sql
    def order_data(self,id_value,data_number):
        order_value=list()
        for i in range(1,data_number):
            pay_id=str(id_value[i-1]).replace("L,)","").replace("(","")
            order_value.append(("周瑜",35999,346,"A城小学","13322222222",130,1,pay_id,str(random.randint(7100000000,7999999999)),2,8800,8800,1,49338,time.localtime(),49338,time.localtime(),405,121,564123698745632,"三年级 3班",30,30,30))
        sys_time=time.localtime()
        self.order_insert(order_value)
        return sys_time


    # 获取order_id
    def get_order_id(self,sys_time,data_number):
        try:
            self.isConnection()
            global cursor
            cursor=self.__db.cursor()
            cursor.execute('select id from `order表` where create_time >= %s',sys_time)
            order_id_list=list()
            for i in range(1,data_number):
                order_id_list.append(cursor.fetchone())
            return order_id_list
        except Exception as e:
            print e
        finally:
            cursor.close()
            self.__db.commit()
            self.__db.close()


    # 插入数据进order_detail表
    def order_detail_insert(self,detail_value):
        try:
            self.isConnection()
            global cursor
            cursor=self.__db.cursor()
            cursor.executemany('insert into `order_details表` (order_id,commodity_name,commodity_id,original_price,payment_price,img,number,status,create_by,create_time,update_by,update_time) value (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',detail_value)
        except Exception as e:
            print e
        finally:
            cursor.close()
            self.__db.commit()
            self.__db.close()


    # 生成order_detail表所需字段,并调用sql
    def order_detail_data(self,order_id_list,data_number):
        detail_value=list()
        for i in range(1,data_number):
            order_id=str(order_id_list[i-1]).replace("L,)","").replace("(","")
            detail_value.append((order_id,"A城小学春季校服","1382932636506902530",8800,8800,"https://ygxf-dev2.obs.cn-north-1.myhuaweicloud.com:443/image%2F1618551784845-589.jpg",1,2,49338,time.localtime(),49338,time.localtime()))
        self.order_detail_insert(detail_value)


if __name__ == '__main__':
    db=DatabaseAcess()
    data_number=3
    db.order_detail_data(order_id_list=db.get_order_id(sys_time=db.order_data(id_value=db.get_pay_id(now_time=db.pay_data(data_number=data_number),data_number=data_number),data_number=data_number),data_number=data_number),data_number=data_number)
    print ("{0}条数据插入完成".format(data_number-1))

到此这篇关于python数据库批量插入数据的实现(executemany的使用)的文章就介绍到这了,更多相关python数据库批量插入 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python创建和使用字典实例详解
Nov 01 Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
Python实现求一个集合所有子集的示例
May 04 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
Python numpy实现二维数组和一维数组拼接的方法
Jun 05 Python
python2与python3共存问题的解决方法
Sep 18 Python
python交换两个变量的值方法
Jan 12 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
python反爬虫方法的优缺点分析
Nov 25 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
Python如何把不同类型数据的json序列化
Apr 30 #Python
python实现三次密码验证的示例
Django一小时写出账号密码管理系统
python中的被动信息搜集
Apr 29 #Python
Python基础之元类详解
Apr 29 #Python
教你怎么用Python监控愉客行车程
Django程序的优化技巧
Apr 29 #Python
You might like
php获得文件扩展名三法
2006/11/25 PHP
坏狼的PHP学习教程之第1天
2008/06/15 PHP
php生成excel列序号代码实例
2013/12/24 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
php实现简单爬虫的开发
2016/03/28 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
如何利用python查找电脑文件
2018/04/27 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
python如何调用php文件中的函数详解
2020/12/29 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
化工机械应届生求职信
2013/11/04 职场文书
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书