mysql pymysql插入500萬資料

2022-03-12 11:18:05 字數 2687 閱讀 5412

目錄

吸取mysql怎麼快速插入500萬行資料?(效率要高)

# 建庫

create database mydb01;

# 使用庫

use mydb01;

# 建表

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.connect() # __init__初始化之後,執行的函式

def connect(self):

# pymysql連線mysql資料庫

# 需要的引數host,port,user,password,db,charset

self.conn = pymysql.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語句,插入資料id,name,gender,email

sql = "insert into tbl_students(id,name,gender,email) values (%s,%s,%s,%s)"

# 定義總插入行數為乙個空列表

data_list =

for i in range(nmin, nmax):

# 新增所有任務到總的任務列表

result = (i, 'mayun' + str(i), 'male', 'mayun' + str(i) + '@qq.com')

# 執行多行插入,executemany(sql語句,資料(需乙個元組型別))

content = self.cur.executemany(sql, data_list)

if content:

print(f'成功插入第條資料')

# 提交資料,必須提交,不然資料不會儲存

self.conn.commit()

def asynchronous(self):

# g_l 任務列表

# 定義了非同步的函式: 這裡用到了乙個gevent.spawn方法

max_line = 10000 # 定義每次最大插入行數(max_line=10000,即一次插入10000行)

g_l = [gevent.spawn(self.run, i, i + max_line) for i in range(1, 5000001, max_line)]

# gevent.joinall 等待所以操作都執行完畢

gevent.joinall(g_l)

self.cur.close() # 關閉游標

self.conn.close() # 關閉pymysql連線

if __name__ == '__main__':

start_time = time.time() # 計算程式開始時間

st = dbutil('127.0.0.1', 3306,'root','root','mydb01','utf8') # 例項化類,傳入必要引數

print('程式耗時'.format(time.time() - start_time)) # 計算程式總耗時

500萬資料耗時130秒

演算法 5 插入排序

從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將新元素插入到該位置後 重複步驟2 5 1 l 89,67,56,45,34,23,1 2d...

5) MySQL插入資料

mysql insert語句允許您將一行或多行插入到表中。下面說明了insert語句的語法 insert into table column1,column2.values value1,value2,首先,在insert into子句之後,在括號內指定表名和逗號分隔列的列表。然後,將括號內的相應列...

mysql5插入亂碼問題

mysql5插入亂碼問題 在資料庫由4.2公升級到5.1.6 comm.之後 都是latin1的預設編碼,以前的程式插入中文亂碼 以前的寫法 在source中加入charset gb2312,然後在插入前執行set names gb2312即可 在網上找了好多文章,除了上面的寫法外 就是直接更改資料...