# -*- coding:UTF-8 -*- from pymysql import connect import gevent import time class MyPyMysql: # 初始化属性 def __init__(self, host, port, username, password, db, charset='utf8'): self.host = host # mysql主机地址 self.port = port # mysql端口 self.username = username # mysql远程连接用户名 self.password = password # mysql远程连接密码 self.db = db # mysql使用的数据库名 self.charset = charset # mysql使用的字符编码,默认为utf8 self.pymysql_connect() # __init__初始化之后,执行的函数 def pymysql_connect(self): # pymysql连接mysql数据库 # 需要的参数host,port,user,password,db,charset self.conn = connect(host=self.host, port=self.port, user=self.username, password=self.password, db=self.db, charset=self.charset ) # 连接mysql后执行的函数 self.asynchronous() def Run(self, nmin, nmax): # 创建游标 self.cur = self.conn.cursor() # 定义sql语句,插入不同数据时需更改此sql语句,飘黄警告可忽略 sql = "INSERT INTO s_capital_back_order (id,order_code,sub_order_code,back_order_code,pay_method_code,pay_type,refund_channel_order_code,refund_type,order_product_amounts,refund_amounts,order_time,pay_time,back_order_time,refund_time,create_time) " \ "VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" # 定义总插入行数为一个空列表 data_list = [] for i in range(nmin, nmax): # 插入具体的假数据,需要与上方的sql语句的元素对应 result = (1104+i, "T6030513731188889870000" + str(i), "T6130513731188889870000" + str(i), "6221238129371983112" + str(i), "weChat", "20", "50000032020190507035840868"+str(i), "30", "10", "11", "2019-04-28 17:20:00", "2019-04-28 17:20:00", "2019-04-28 17:20:00","2019-04-28 17:20:00","2019-04-28 17:20:00" ) # 添加所有任务到总的任务列表,即 将每次添加的数据插入总列表 data_list.append(result) # 执行多行插入,executemany(sql语句,数据(需一个元组类型)),使用executemany执行多行插入可缩短插入时间提高效率 content = self.cur.executemany(sql, data_list) if content: print('成功插入第{}条数据'.format(nmax - 1)) # 提交数据,必须提交,不然数据不会保存 self.conn.commit() def asynchronous(self): # g_l 任务列表 # 定义了异步的函数: 这里用到了一个gevent.spawn方法 max_line = 50 # 定义每次最大插入行数(max_line=10000,即一次插入10000行) g_l = [gevent.spawn(self.Run, i, i + max_line) for i in range(1, 101, max_line)] # gevent.joinall 等待所以操作都执行完毕 gevent.joinall(g_l) self.cur.close() # 关闭游标 self.conn.close() # 关闭pymysql连接 if __name__ == '__main__': start_time = time.time() # 计算程序开始时间 st = MyPyMysql('192.168.0.231', 3307, 'root', '1q2w3e', 'finance') # 实例化类,传入必要参数 print('程序耗时{:.2f}'.format(time.time() - start_time)) # 计算程序总耗时