天天看點

python批量讀取txt檔案并使用mysql批量插入

python  從檔案讀寫,mysql批量插入資料

采用了兩種方法,第一中直接向mysql插入随機測試資料,第二種采用讀寫檔案從檔案中讀入資料插入mysql,适合從生産環境導入資料到測試環境庫。

如果資料量很大的話,讀取一條插入一條,那麼性能将會很低效,是以需要沒讀取一批,然後在批量插入,多次循環即可。下面直接看代碼:

# -*- coding: utf-8 -*-

import os
import mysql.connector

from sqlalchemy import text
import gzip
import json,datetime,decimal

config = {
    'user': 'homestead',
    'password': 'secret',
    'host': '127.0.0.1',
    'database': 'testuser',
    'raise_on_warnings': True,
}
cnx = mysql.connector.connect(**config)


class ReadFile:
    def readLines(self):
        fname = '/htdocs/python/user_log.txt.zip'
        f = gzip.open(fname, "rb")
        i = 0
        list = []
        for line in f:
            #strs = line.split("\t")
            st = line.decode('utf-8').replace('\n', '')
            st = json.loads(st)
            #if len(st) != 10:
                #continue
            data = (st[0],st[1],st[2],st[3],st[4],st[5],st[6].replace("\n", ""))
            list.append(data)
            cursor = cnx.cursor()
            sql = "insert into user_log(id,name,nickname,create_date,uuid,update_date,is_del)values(%s,%s,%s,%s,%s,%s,%s)"
            if i > 3:
                cursor.executemany(sql, list)
                cnx.commit()
                print("插入")
                i = 0
                list.clear()
            i = i + 1
        if i > 0:
            cursor.executemany(sql, list)
            cnx.commit()
        cnx.close()
        f.close()
        print("ok")


if __name__ == "__main__":
    readFile = ReadFile()
    readFile.readLines()
           

對幾百萬的資料就可以很快的插入表中了。