使用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