目錄
吸取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即可 在網上找了好多文章,除了上面的寫法外 就是直接更改資料...