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()
對幾百萬的資料就可以很快的插入表中了。