精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

100%讓你在10分鐘內學會如何用Python將數據批量的插入到數據庫

開發 后端 大數據
本文基于python, 使用pandas, pymysql等三方庫實現了向數據庫中高效批量插入數據,一方面提供被網上很多瞎轉載的答案給坑蒙了的人(因為我也是),一方面自己也做個筆記,以后方便查閱

我是一名掙扎在編程鏈底端的pythoner,工作中既要和數據打交道,也要保持和erp系統,web網站友好的"溝通"···,我會時不時的分享下工作中遇到那點事,包括個人覺得值得記錄的編程小技巧,還有就是遇到的問題以及解決方案,還有源碼的閱讀等等,可能也有編程中的生活感悟,不說了,我要去重構我的程序了

 

100%讓你在10分鐘內學會如何用python將數據批量的插入到數據庫

本文基于python, 使用pandas, pymysql等三方庫實現了向數據庫中高效批量插入數據,一方面提供被網上很多瞎轉載的答案給坑蒙了的人(因為我也是),一方面自己也做個筆記,以后方便查閱

需求原因

最近在處理一個需求,有關批量往數據庫插入數據的,描述如下

  • 原來的程序是基于sql的存儲過程進行數據的更新修改操作,由于數據量較大,導致對數據庫壓力太大,于是需要將程序重構為用python讀取文件的方式將數據做計算處理,減少這部分的壓力,最后僅僅將計算的結果調用aws的lambda服務重新更新到數據庫中就可以了,減少了極大的壓力,也降低了成本。涉及數據庫主要是插入及更新操作

版本庫信息

  • 基于linux系統寫的
  • 三方庫 >>> pandas 1.0.5, pymysql 0.9.3
  • python版本 >>> 3.7
  • 標準庫 >> os

邏輯梳理

實際上,最后一步,要寫入數據庫的文件數據是存儲在內存中的。因為讀取文件后進行的計算都是在內存中進行的,那么計算的結果也沒必要再寫到本地,再去讀取,再寫入數據庫,這是會影響程序的效率的。邏輯如下

  • 讀取文件
  • 文件的拼接及計算,生成新的df
  • 初始化數據庫的連接
  • 將df所需數據轉換為元組數據(取決于數據庫的三方庫的接口是如何支持批量操作的)
  • 將數據寫入數據庫
  • 檢查數據庫內容即可

分步實現及分析

讀取文件

給文件路徑,然后去讀文件就行了,強調一下需要注意的點

  • 絕對路徑: 這種最簡單,直接給路徑字符串就行了,但是一旦文件夾目錄結構變化,就需要頻繁的改
  • 相對路徑: 我一般喜歡先在腳本中定位當前腳本的位置,然后通過相對路徑去找,這樣只要你整個包內部的目錄結構不變化,都不用改,就算部署上線也是直接根據包的位置來,很方便
  • pandas默認會將所有數字讀取為float類型,所以對于那種看起來是數字,但實際上是需要當作字符串使用的字段進行類型的轉換
  1. import pandas as pd  
  2. import numpy as np 
  3.  
  4. # 當前腳本的位置 
  5. current_folder_path = os.path.dirname(__file__) 
  6.  
  7. # 你的文件的位置 
  8. your_file_path1 = os.path.join(current_folder_path, "文件的名字1"
  9. your_file_path2 = os.path.join(current_folder_path, "文件的名字2"
  10.  
  11. # 我這里是以讀取csv文件為例, delimiter為我們內部約定的列之間的分割符 
  12. df1 = pd.read_csv(your_file_path1, dtype={"column1": str, "column2": str}, delimiter="/t"
  13. df2 = pd.read_csv(your_file_path2, dtype={"column1": str, "column2": str}, delimiter="/t"

文件的拼接及計算

文件的拼接主要就是merge和concat兩個語法的使用,強調一下小知識點

  • merge語法主要是對應于sql語言的內連接,外連接,左連接和右連接等
  • concat主要是用來將相同結構的df單純的拼接起來(也就是列表的總行數增加)
  1. # 這里以左連接舉例, 假設只有兩個文件拼接 
  2. ret_df = pd.merge(df1, df2, left_on=["column_name"], right_on=["column_name"], how="left"

初始化連接

導入三方庫pymysql,初始化連接

  1. # pymysql的接口獲取鏈接 
  2. def mysql_conn(host, userpassword, db, port=3306, charset="utf8"): 
  3.   # 傳參版本 
  4.   conn = pymysql.connect(host=host, user=userpassword=passworddatabase=db, port=port, charset=charset) 
  5.   return conn 

對應接口轉換數據

  1. 數據插入要考慮寫入一個事務,因為失敗的話,要保證對數據庫沒有影響
  2. 構造符合對應接口的數據格式,通過查詢,pymysql有兩種可以執行語句的接口
  • execute(單條插入語句)
  • 執行單條語句的接口
  1. 類似這種: Insert into table_name (column) values (value);
  2. executemany(批量插入語句)
  • 執行多條語句的接口
  • 類似這種: Insert into table_name (column1, column2, column3) values (value1, value2, value3);

具體實現如下

  1. # 先創建cursor負責操作conn接口 
  2. conn = mysql_conn("your db host""your username""your password""db name"
  3. cursor = conn.cursor() 
  4. # 開啟事務 
  5. conn.begin() 
  6.  
  7. #############      構造批量數據的過程            ############# 
  8.  
  9. # 先構造需要的或是和數據庫相匹配的列 
  10. columns = list(df.columns) 
  11. # 可以刪除不要的列或者數據庫沒有的列名 
  12. columns.remove("列名"
  13. # 重新構造df,用上面的columns,到這里你要保證你所有列都要準備往數據庫寫入了 
  14. new_df = df[columns].copy() 
  15.  
  16. # 構造符合sql語句的列,因為sql語句是帶有逗號分隔的,(這個對應上面的sql語句的(column1, column2, column3)) 
  17. columns = ','.join(list(new_df.columns)) 
  18.  
  19. # 構造每個列對應的數據,對應于上面的((value1, value2, value3)) 
  20. data_list = [tuple(i) for i in gdsord_df.values] # 每個元組都是一條數據,根據df行數生成多少元組數據 
  21.  
  22. # 計算一行有多少value值需要用字符串占位 
  23. s_count = len(data_list[0]) * "%s," 
  24.  
  25. # 構造sql語句 
  26. insert_sql = "insert into " + "數據庫表名" + " (" + columns + ") values (" + s_count[:-1] + ")" 

將數據寫入數據庫

這個簡單,直接上代碼

  1. cursor.executemany(insert_sql, data_list) 
  2. conn.commit() 
  3. cursor.close() 
  4. conn.close() 

檢查數據庫是否插入成功

如果沒問題的話,就可以同時進行多個文件讀寫,計算,最后啟用多線程同時向數據庫中寫入數據了,非常高效!

完整代碼

  1. import pandas as pd  
  2. import numpy as np 
  3.  
  4.  
  5. # pymysql接口 
  6. def mysql_conn(host, userpassword, db, port=3306, charset="utf8"): 
  7.   conn = pymysql.connect(host=host, user=userpassword=passworddatabase=db, port=port, charset=charset) 
  8.   return conn 
  9.  
  10.  
  11. # 當前腳本的位置 
  12. current_folder_path = os.path.dirname(__file__) 
  13.  
  14. # 你的文件的位置 
  15. your_file_path1 = os.path.join(current_folder_path, "文件的名字1"
  16. your_file_path2 = os.path.join(current_folder_path, "文件的名字2"
  17.  
  18. # 我這里是以讀取csv文件為例, delimiter為我們內部約定的列之間的分割符 
  19. df1 = pd.read_csv(your_file_path1, dtype={"column1": str, "column2": str}, delimiter="/t"
  20. df2 = pd.read_csv(your_file_path2, dtype={"column1": str, "column2": str}, delimiter="/t"
  21. # 合并 
  22. ret_df = pd.merge(df1, df2, left_on=["column_name"], right_on=["column_name"], how="left"
  23.  
  24. # 先創建cursor負責操作conn接口 
  25. conn = mysql_conn("your db host""your username""your password""db name"
  26. cursor = conn.cursor() 
  27. # 開啟事務 
  28. conn.begin() 
  29.  
  30. # 先構造需要的或是和數據庫相匹配的列 
  31. columns = list(df.columns) 
  32. # 可以刪除不要的列或者數據庫沒有的列名 
  33. columns.remove("列名"
  34. # 重新構造df,用上面的columns,到這里你要保證你所有列都要準備往數據庫寫入了 
  35. new_df = df[columns].copy() 
  36.  
  37. # 構造符合sql語句的列,因為sql語句是帶有逗號分隔的,(這個對應上面的sql語句的(column1, column2, column3)) 
  38. columns = ','.join(list(new_df.columns)) 
  39.  
  40. # 構造每個列對應的數據,對應于上面的((value1, value2, value3)) 
  41. data_list = [tuple(i) for i in gdsord_df.values] # 每個元組都是一條數據,根據df行數生成多少元組數據 
  42.  
  43. # 計算一行有多少value值需要用字符串占位 
  44. s_count = len(data_list[0]) * "%s," 
  45.  
  46. # 構造sql語句 
  47. insert_sql = "insert into " + "數據庫表名" + " (" + columns + ") values (" + s_count[:-1] + ")" 
  48. try: 
  49.   cursor.executemany(insert_sql, data_list) 
  50.   conn.commit() 
  51.   cursor.close() 
  52.   conn.close() 
  53. except Exception as e: 
  54.   # 萬一失敗了,要進行回滾操作 
  55.   conn.rollback() 
  56.   cursor.close() 
  57.   conn.close() 

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2009-11-20 17:06:49

Oracle數據庫字符

2019-11-20 10:38:59

MySQLSQL數據庫

2021-07-15 06:43:11

Bash調試腳本

2018-11-28 11:20:53

Python函數式編程編程語言

2011-08-04 18:00:47

SQLite數據庫批量數據

2019-07-18 16:32:06

Python函數數據

2018-02-01 14:15:00

Python函數

2009-11-03 17:15:07

VB.NET開發Exc

2009-11-20 18:08:37

Oracle數據庫

2020-05-22 10:20:27

Shiro架構字符串

2018-06-26 09:37:07

時序數據庫FacebookNoSQL

2009-11-02 18:07:58

Oracle數據庫

2024-12-04 16:12:31

2016-12-21 15:08:14

數據庫垂直拆分

2020-07-21 07:42:29

數據庫信息技術

2020-05-26 10:42:31

數據庫讀寫分離數據庫架構

2023-04-15 20:33:35

圖形數據庫數據庫

2025-02-25 07:49:36

智能體數據庫DeepSeek

2023-12-22 09:37:13

二分查找數組數據庫

2021-07-19 15:33:27

編程Rust開發
點贊
收藏

51CTO技術棧公眾號

三级网站在线播放| 97伦伦午夜电影理伦片| 超碰中文在线| 久久免费精品国产久精品久久久久| 日本精品在线视频 | 国产强被迫伦姧在线观看无码| 欧美成人首页| 亚洲欧美手机在线| 波多野结衣三级视频| 两个人看的在线视频www| 久久综合久久综合久久| 国产精品久久久久久久9999| 久久久久亚洲AV成人| 图片婷婷一区| 91精品国产91综合久久蜜臀| 18岁网站在线观看| 理论片午午伦夜理片在线播放| 丁香亚洲综合激情啪啪综合| 国产精品99久久久久久久久| 国产一级久久久| 手机在线一区二区三区| 亚洲电影在线看| 日本中文字幕观看| 丝袜美腿诱惑一区二区三区| 一区二区三区欧美在线观看| 日韩视频在线播放| 五月天婷婷在线播放| 国产一区二区电影| 国产美女91呻吟求| 欧美一级特黄视频| 伊人成人在线| 欧美精品免费看| 日本猛少妇色xxxxx免费网站| 91成人精品在线| 在线观看91精品国产麻豆| 精品视频一区二区在线| 成人高潮aa毛片免费| 亚洲欧美韩国综合色| 先锋在线资源一区二区三区| 亚州男人的天堂| 成人激情校园春色| 99影视tv| av一级黄色片| 韩日欧美一区二区三区| 国产精品一区二区三区毛片淫片| 你懂的国产在线| 亚洲男人影院| 欧美资源在线观看| 四虎精品永久在线| 亚洲深夜激情| 欧美性视频精品| 国产又色又爽又黄的| 国产精品s色| 欧美成人亚洲成人| 激情视频在线播放| 欧美特黄一区| 久久久久国产一区二区三区| 久久午夜无码鲁丝片| 国产精品大片免费观看| 欧美激情精品久久久久| 国产 日韩 欧美 成人| 亚洲手机视频| 7777免费精品视频| 手机看片久久久| 肉色丝袜一区二区| 国产欧美精品在线播放| 国产v在线观看| 成人在线视频一区二区| 精品国产免费人成电影在线观...| 人妻夜夜爽天天爽| 91在线看国产| 日韩欧美亚洲在线| 老司机av在线免费看| 亚洲综合一区在线| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 不卡av影片| 欧美专区亚洲专区| 日本一二三四区视频| 99精品国产高清一区二区麻豆| 亚洲第一级黄色片| 国产成人无码精品久久二区三| 欧美伦理在线视频| 久久成人一区二区| 日本少妇裸体做爰| 奇米影视7777精品一区二区| 91久久国产综合久久91精品网站| 亚洲第一色视频| 2023国产精品| 在线观看一区欧美| √天堂8资源中文在线| 欧美艳星brazzers| 国产精品99精品无码视亚| 日本午夜精品久久久| 一区二区国产精品视频| 久久久久久福利| 丝袜美腿高跟呻吟高潮一区| 91久久精品在线| 亚洲av片一区二区三区| 中文字幕中文字幕一区二区| 免费不卡av在线| 国产精品美女午夜爽爽| 欧美精品一区视频| 夫妇露脸对白88av| 亚洲免费成人| 91日韩在线视频| 丝袜视频国产在线播放| 国产精品天干天干在观线| 黄色三级中文字幕| 亚洲成av在线| 亚洲国产私拍精品国模在线观看| 大吊一区二区三区| 国产精品外国| 3d精品h动漫啪啪一区二区| 精品久久久久一区二区三区| 亚洲精品乱码久久久久久久久| av片中文字幕| 国产精品视屏| 欧美精品在线免费播放| 中文字幕手机在线视频| 不卡一区二区三区四区| 国产欧美自拍视频| 色猫猫成人app| 亚洲男人天堂网| 亚欧洲精品在线视频| 精品一区二区三区的国产在线播放| 久久涩涩网站| av资源在线| 精品sm在线观看| 亚洲一二三在线观看| 日本中文字幕一区二区有限公司| 精品国产_亚洲人成在线| a视频在线免费看| 欧美精品三级在线观看| 日本一区二区视频在线播放| 久久国产日本精品| 久久久久免费网| 九色porny自拍视频在线观看| 欧美一区日本一区韩国一区| 免费黄色国产视频| 麻豆精品在线播放| 亚洲免费精品视频| av成人免费| 亚洲最新中文字幕| 手机av免费观看| 国产女人aaa级久久久级| 日本一本二本在线观看| 免费看成人吃奶视频在线| 国产91精品黑色丝袜高跟鞋 | 日韩一区二区电影| 18岁成人毛片| 国产成人午夜99999| 大片在线观看网站免费收看| 久久av网站| 欧美精品在线免费| 丰满少妇高潮在线观看| 亚洲国产中文字幕在线视频综合 | 久久久久久久久免费| 日韩欧美在线播放视频| 亚洲制服一区| 国产精品日韩欧美| 超碰porn在线| 欧美大胆人体bbbb| 91午夜视频在线观看| 久久综合九色综合欧美亚洲| 久久国产色av免费观看| 日韩a一区二区| 91影院在线免费观看视频| 在线观看中文| 日韩成人xxxx| 天天天天天天天干| 亚洲视频免费观看| 911亚洲精选| 奶水喷射视频一区| 中文字幕中文字幕一区三区| 秋霞午夜一区二区三区视频| 国模吧一区二区| 九色在线播放| 欧美精品乱码久久久久久按摩| 私库av在线播放| 97久久超碰国产精品电影| av无码精品一区二区三区| 日韩国产欧美| 国产v亚洲v天堂无码| 亚洲黄色免费看| 久久精品国产欧美激情| 人妻妺妺窝人体色www聚色窝| 日韩欧美极品在线观看| 国产又粗又猛又爽又黄的视频四季 | 国产又大又长又粗| 亚洲sss视频在线视频| 蜜桃久久精品成人无码av| 国产精品888| 黄色高清无遮挡| 一本一道久久综合狠狠老 | 欧美在线电影| 91久久国产综合久久91精品网站| 男人久久天堂| 久久国产精品久久久久久| 五月婷婷六月色| 国产中文字幕视频| 亚洲综合男人的天堂| 天天躁夜夜躁狠狠是什么心态| 国产一区二区三区四| 无码无遮挡又大又爽又黄的视频| 自拍视频亚洲| 日本在线播放不卡| 精品视频在线你懂得| 成人精品在线观看| 台湾佬成人网| 国产91精品高潮白浆喷水| 伊人222成人综合网| 亚洲图片欧洲图片av| 色偷偷在线观看| 欧美一区二区三区思思人 | 日韩精品影音先锋| 中国一级片黄色一级片黄| 午夜精品久久久久久久蜜桃app| 最新黄色av网址| 久久久久久久久久久99999| 无码人妻一区二区三区精品视频| 日本免费在线视频不卡一不卡二| 亚洲自偷自拍熟女另类| 国内久久视频| 日韩精品一区二区三区电影| 成人在线电影在线观看视频| 蜜桃精品久久久久久久免费影院| 国产ts一区| 99在线视频播放| 高清一区二区中文字幕| 国产精品视频一| 久久91导航| 国产成人中文字幕| 波多野结衣亚洲| 日韩女在线观看| 午夜伦理福利在线| 91av成人在线| 日韩电影免费看| 午夜精品一区二区三区av| 欧美黑人猛交的在线视频| 美女少妇精品视频| 菠萝菠萝蜜在线视频免费观看| 日日摸夜夜添一区| www.中文字幕久久久| 国产一区二区三区在线播放免费观看 | 亚洲精品在线观看视频| 亚洲第一色视频| 精品久久久久久久久久久久久久久久久 | 免费观看成人性生生活片| 欧美有码在线视频| 中老年在线免费视频| 欧洲精品久久久| 成人在线视频播放| 国产精品美女网站| 久久亚洲人体| 成人欧美一区二区三区在线湿哒哒 | 女性生殖扒开酷刑vk| 粉嫩13p一区二区三区| 国产伦精品一区二区三区88av| 丁香五精品蜜臀久久久久99网站 | 欧美肥婆姓交大片| bl视频在线免费观看| 亚州成人av在线| 亚洲欧洲自拍| 国产美女直播视频一区| japansex久久高清精品| 亚洲xxx大片| 欧美xxxx在线| 日本一区二区三区四区在线观看 | 97碰在线视频| 亚洲精品女人| 免费黄色一级网站| 国产一区999| 影音先锋人妻啪啪av资源网站| www激情久久| 毛片视频免费播放| 一区二区三区在线观看网站| 国产一区二区三区影院| 在线观看免费成人| 99久久精品国产一区色| 亚洲成人在线网| 国产青青草在线| 美日韩在线视频| 大胆人体一区| 91久久久久久久| 美女毛片一区二区三区四区最新中文字幕亚洲| 日韩免费一区二区三区| 欧美精品99| 狠狠操精品视频| 国产成人av电影在线观看| 中文字幕5566| 1000部国产精品成人观看| 日本三级片在线观看| 精品视频在线免费看| 成人乱码一区二区三区| 在线播放国产一区二区三区| 日韩另类在线| 国产精品福利小视频| 久久国产精品免费一区二区三区| 极品尤物一区二区三区| 亚洲综合中文| 青青在线视频观看| 成人午夜在线播放| 欧美xxxooo| 色综合久久中文综合久久97| 精品国产伦一区二区三区| 亚洲欧洲黄色网| 麻豆福利在线观看| 91久久精品一区| 国产影视一区| 国产极品在线视频| 国产乱码精品1区2区3区| 特级西西www444人体聚色| 午夜精品福利一区二区三区av| 亚洲性生活大片| 国产丝袜一区二区| 搞黄网站在线看| 亚洲伊人久久大香线蕉av| 欧洲激情视频| 人妻少妇被粗大爽9797pw| 高清国产一区二区三区| 免费在线观看a级片| 欧美揉bbbbb揉bbbbb| 久久综合九色综合久| 久久青草福利网站| 一区二区三区免费在线看| 在线观看免费黄色片| 久久国产尿小便嘘嘘| 国产精品久久久久无码av色戒| 午夜精品影院在线观看| 超碰人人人人人人| 欧美成人午夜激情视频| 电影91久久久| 五月天在线免费视频| 九色综合狠狠综合久久| 成人性视频免费看| 欧美日韩国产123区| h视频网站在线观看| 国产精品扒开腿做爽爽爽视频| 偷窥自拍亚洲色图精选| 极品美女扒开粉嫩小泬| 播五月开心婷婷综合| 一级片免费网址| 亚洲精品国产福利| 一二三四视频在线中文| 久久久久久久有限公司| 美女久久网站| a资源在线观看| 欧美视频一区二区三区在线观看| 国产高清视频在线观看| 国产精品福利久久久| 日韩专区精品| 91日韩精品视频| 亚洲免费观看高清| 亚洲精品久久久久久久久久 | 亚洲精品www久久久久久广东| av影院在线免费观看| 久久福利电影| 日产国产高清一区二区三区| 中文字幕求饶的少妇| 91精品国产综合久久久久久漫画 | 成人在线视频免费观看| 欧美日韩中文不卡| 亚洲精品国产精品乱码不99| 丰满人妻一区二区三区免费| 性欧美在线看片a免费观看| 欧美男gay| 一级黄色片在线免费观看| 亚洲综合另类小说| 欧美色图另类| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 91精品国产99| 亚洲人成精品久久久| 免费成年人高清视频| 亚洲一线二线三线久久久| 欧美午夜黄色| 成人精品视频在线| 一本久道久久综合婷婷鲸鱼| 成人片黄网站色大片免费毛片| 欧美日产在线观看| tube8在线hd| 茄子视频成人在线观看| 国产一区二区三区免费观看| 九九九国产视频| 中文字幕成人在线| 欧美在线在线| 成年人视频在线免费| 亚洲蜜臀av乱码久久精品蜜桃| 欧性猛交ⅹxxx乱大交| 国产精品高清在线观看| 欧美日韩在线大尺度| 精品成人av一区二区三区| 91精品国产综合久久久久久漫画| 人狥杂交一区欧美二区| 国产高清免费在线| 91视频com| av中文字幕免费在线观看| 欧美在线精品免播放器视频| 天天色综合色| 波多野结衣片子| 精品奇米国产一区二区三区|