使用python向数据库插入数据


# -*- 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))  # 计算程序总耗时
    
    

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM