精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人动漫视频在线| 999国产精品永久免费视频app| 亚洲综合成人在线| www久久99| 欧美第一页在线观看| 经典三级一区二区| 国产女主播在线一区二区| 国产热re99久久6国产精品| 五月综合色婷婷| 粉嫩久久久久久久极品| 欧美日韩在线视频观看| 亚洲一区二区三区免费看| 国产高中女学生第一次| 欧美日韩综合| 亚洲欧美国内爽妇网| 亚洲另类第一页| 男人天堂亚洲天堂| 久久久久久免费| 亚洲字幕在线观看| 黄色在线观看国产| 亚洲乱码精品| 亚洲精品久久久久久久久久久| 欧美不卡在线播放| 日本在线www| 成人午夜免费av| 国产精品精品视频| 懂色av.com| 久久精品国产大片免费观看| 亚洲第一精品久久忘忧草社区| 那种视频在线观看| 自拍亚洲图区| 久久久精品影视| 亚洲xxxx视频| 中文天堂在线视频| 精品人妻一区二区三区含羞草| 看黄网站在线观看| 成人免费观看视频| 国产精品一区av| 奇米影视第四色777| 久久精品国产大片免费观看| 亚洲国产成人精品一区二区| www.亚洲高清| 色老太综合网| 亚洲成av人**亚洲成av**| 亚洲欧美久久234| 亚洲色偷精品一区二区三区| 国产经典欧美精品| 国产精品视频大全| 91精品国产高清一区二区三密臀| 中文字幕一区二区三区欧美日韩| 亚洲精选中文字幕| 国产午夜在线一区二区三区| 亚洲男男av| 欧美熟乱第一页| 久久久999免费视频| 国产乱色在线观看| 中文字幕一区二区在线播放| 秋霞毛片久久久久久久久| 日韩一区二区三区在线观看视频| 看片网站欧美日韩| 国产极品jizzhd欧美| 国产91精品一区| 欧美天天在线| 超碰精品一区二区三区乱码| 免费看一级黄色| 狠狠做深爱婷婷综合一区| 日韩激情中文字幕| 欧美剧情电影在线观看完整版免费励志电影 | 日韩欧美一区中文| 激情在线观看视频| 欧美一级网址| 精品视频1区2区3区| 亚洲视频在线观看一区二区三区| 中文字幕在线中文字幕在线中三区| 亚洲小说欧美激情另类| www.日本在线视频| 免费毛片在线看片免费丝瓜视频 | 国产啊啊啊视频在线观看| 1区2区3区国产精品| 蜜桃狠狠色伊人亚洲综合网站| 欧洲av在线播放| 成人av影院在线| 国产精品99久久久久久久| 亚洲高清视频网站| 99视频精品全部免费在线| 91人人爽人人爽人人精88v| 国产探花精品一区二区| 国产成人午夜电影网| 国产不卡一区二区三区在线观看| 可以免费观看的毛片| www.66久久| a√资源在线| 永久av免费网站| 中文字幕一二三| 美女国产精品久久久| 91精品国产全国免费观看| 手机免费av片| 一区二区三区国产好| 精品乱码亚洲一区二区不卡| 亚洲男女在线观看| 免费看日本一区二区| 精品网站999www| 国产又大又粗又爽的毛片| 欧美成人直播| 欧美激情精品久久久久久| 欧美福利视频一区二区| 日韩影院免费视频| 91色琪琪电影亚洲精品久久| 国产成人av免费看| av激情综合网| 欧美日本韩国一区二区三区| 草草影院在线观看| 亚洲激情六月丁香| 欧美色图另类小说| 亚洲午夜国产成人| 亚洲国产天堂久久国产91| 高清国产在线观看| 91视频精品| 97超级碰碰人国产在线观看| 精品乱码一区内射人妻无码 | 日本精品二区| 亚洲91av| 欧洲视频一区二区| 欧洲成人午夜精品无码区久久| 日韩高清成人在线| 精品国产一区二区三区久久| 精品国产免费观看| 国精产品一区一区三区mba桃花| 国产原创精品| 成人区精品一区二区不卡| 日韩欧美在线一区| 伊人国产精品视频| 成人看片爽爽爽| 最近中文字幕2019免费| 日韩精品视频免费播放| 国产一区二区三区四区五区入口| 久久久久久久久久久一区| www免费在线观看| 亚洲成a人片在线观看中文| www.久久av.com| 一本久久青青| 久久久亚洲国产天美传媒修理工| 一级片在线观看视频| 成人亚洲一区二区一| 日本一区不卡| 忘忧草在线日韩www影院| 欧美一级在线观看| 日本黄色录像视频| 日本怡春院一区二区| 蜜桃视频在线观看成人| 欧美1—12sexvideos| 91高清视频免费看| 波多野结衣办公室33分钟| 亚洲福利免费| 99精彩视频| 超碰在线观看免费| 制服.丝袜.亚洲.另类.中文| 泷泽萝拉在线播放| 一本色道久久综合| 国产在线精品二区| 精精国产xxxx视频在线播放| 精品免费国产一区二区三区四区| 国产97免费视频| 久草中文综合在线| 91xxx视频| 精品国产亚洲一区二区三区大结局 | 日韩成人免费电影| 日韩精品一线二线三线| 成人av免费电影网站| 日韩精品视频免费专区在线播放| 亚洲国产精品成人无久久精品| 国产suv精品一区二区883| 今天免费高清在线观看国语| 国产高清亚洲| 欧美风情在线观看| 人妻精品无码一区二区| 亚洲va欧美va天堂v国产综合| 99久久久无码国产精品性波多 | 天堂午夜影视日韩欧美一区二区| 欧美久久久久久| 成人免费看视频网站| 亚洲男人天堂网站| 久久久999久久久| 一区在线播放视频| 亚洲成人手机在线观看| 国产精品99一区二区| 国新精品乱码一区二区三区18| segui88久久综合9999| 国产视频精品免费播放| 无码人妻黑人中文字幕| 国产精品日日摸夜夜摸av| 色综合五月婷婷| 欧美精品色网| 国产在线一区二区三区欧美 | 青青草原在线亚洲| 国产a∨精品一区二区三区不卡| 成人在线免费电影| 日韩亚洲电影在线| 午夜毛片在线观看| 国产精品乱人伦| 五月天丁香社区| 蜜桃精品视频在线| 成人一级生活片| 国产精品一区二区三区av麻| 国产综合视频在线观看| 日本天码aⅴ片在线电影网站| 亚洲精品福利在线观看| 色婷婷久久综合中文久久蜜桃av| 亚洲男人的天堂在线aⅴ视频| 日韩免费高清一区二区| 日本视频一区二区三区| 国风产精品一区二区| 一本色道久久综合亚洲精品酒店 | 玖玖精品一区| 日本精品久久久久久久| 超碰在线最新| 国产香蕉97碰碰久久人人| 国产xxxx在线观看| 黑人精品xxx一区一二区| 顶级黑人搡bbw搡bbbb搡| 99国产精品视频免费观看| 天天综合网久久| 免费在线成人| 日韩久久久久久久久久久久| 黑丝美女一区二区| 久精品国产欧美| 国产视频一区二| 欧美与欧洲交xxxx免费观看| 免费黄色在线| 一区二区亚洲精品国产| 欧美天堂在线视频| 欧美日韩国产系列| 久久久久久久久久久久久久av| 亚洲精品视频在线| 黄色av免费播放| 成人午夜在线播放| 国产精欧美一区二区三区白种人| 亚洲综合99| 日韩一级免费看| 中文字幕免费精品| 亚洲人体一区| 国产日韩欧美一区二区三区| 国产有色视频色综合| 99久久免费精品国产72精品九九| 国产日韩中文字幕| 91九色综合| 日韩美女在线看| rebdb初裸写真在线观看| 欧美国产日韩在线| 自由的xxxx在线视频| 日日摸夜夜添一区| 黄色av免费在线看| 精品爽片免费看久久| 亚洲精品911| 日韩欧美国产三级电影视频| 在线视频1卡二卡三卡| 色老汉一区二区三区| 国产中文字幕视频| 亚洲成人在线免费| 日本三级欧美三级| 亚洲sss视频在线视频| 久久久久无码国产精品| 亚洲日本护士毛茸茸| 日本裸体美女视频| 日韩美女啊v在线免费观看| 亚洲AV成人无码精电影在线| 国产精品久久久久久久久免费桃花| 国产精品成人无码免费| 中文字幕巨乱亚洲| 扒开jk护士狂揉免费| 久久伊人中文字幕| 自拍偷拍视频亚洲| 久久久国产午夜精品| 久久av无码精品人妻系列试探| 国产日本亚洲高清| 少妇高潮在线观看| 午夜视频一区二区| 亚洲天堂视频在线播放| 制服丝袜亚洲精品中文字幕| 天天综合天天综合| 中文字幕在线精品| 91资源在线观看| 国产精品久久久久久久av电影 | 欧美日本国产精品| 亚洲91视频| 国产亚洲天堂网| 九九**精品视频免费播放| 扒开伸进免费视频| 国产欧美一区二区精品忘忧草| 免费中文字幕日韩| 欧美日韩人人澡狠狠躁视频| 国产又大又粗又硬| 亚洲精品综合久久中文字幕| h片在线播放| 国产成人综合精品| 亚洲国产一区二区三区网站| 欧美日韩综合精品| 欧美精品国产| 中文久久久久久| kk眼镜猥琐国模调教系列一区二区| 国产毛片欧美毛片久久久| 亚洲国产精品麻豆| 国产又粗又长又大视频| 亚洲欧美精品在线| 麻豆av在线播放| 91精品国产自产在线老师啪| 亚州国产精品| 女人被男人躁得好爽免费视频| 日韩av在线免费观看不卡| 午夜免费福利影院| 亚洲免费av高清| 在线观看中文字幕2021| 日韩精品在线免费观看| 日本孕妇大胆孕交无码| 国产在线a不卡| 欧美伦理在线视频| 亚洲欧洲日产国码无码久久99| 国产成人精品免费视频网站| 在线观看天堂av| 色欧美乱欧美15图片| 欧美亚洲精品在线观看| 欧美日本国产在线| 国产午夜久久av| 在线视频不卡一区二区三区| 日韩中文字幕一区二区三区| 不卡一区二区在线观看| 亚洲一区二区三区国产| 国产成人三级一区二区在线观看一| 在线视频欧美日韩| 性欧美gay| 免费av一区二区三区| a91a精品视频在线观看| 看全色黄大色黄女片18| 亚洲一区成人在线| 亚洲第一精品网站| 欧美激情第一页xxx| 国产中文欧美日韩在线| 免费在线观看污污视频| 久久99精品久久久久久国产越南| 女人黄色一级片| 欧美三区在线观看| av中文字幕在线| 国产欧美韩国高清| 欧美成免费一区二区视频| 午夜精品中文字幕| 亚洲欧洲一区二区三区| 91好色先生tv| 久久精品国产v日韩v亚洲| 97久久精品一区二区三区的观看方式| 亚洲欧美日产图| 国产在线观看免费一区| 中文字幕av免费在线观看| 日韩欧美在线网站| 国产美女情趣调教h一区二区| 国产精品国产一区二区| 在线亚洲精品| 久久视频精品在线观看| 欧美精选午夜久久久乱码6080| 日本高清中文字幕在线| 91香蕉亚洲精品| 国内成人在线| av鲁丝一区鲁丝二区鲁丝三区| 欧美性高跟鞋xxxxhd| av在线中文| 91久久极品少妇xxxxⅹ软件| 在线欧美三区| 国产真实乱人偷精品人妻| 欧美三级视频在线播放| 超碰在线caoporn| 激情一区二区三区| 日本aⅴ亚洲精品中文乱码| 91麻豆免费视频网站| 亚洲精品一区二区三区香蕉| 第84页国产精品| 一区二区三区的久久的视频| 国产黑丝在线一区二区三区| 国产成人在线观看网站| 在线电影av不卡网址| 97品白浆高清久久久久久| 国产主播在线看| 亚洲视频在线观看一区| 女人18毛片一区二区三区| 日本精品视频在线| 欧美国产专区| 亚洲人成人无码网www国产| 在线综合视频播放| 在线观看爽视频| av不卡在线免费观看| 91年精品国产| 国产毛片一区二区三区va在线| 91精品国产91久久久久福利| 久久国产精品亚洲人一区二区三区 | 黄色成人在线视频| 欧美日韩激情四射| 国产免费观看久久| 丰满熟妇人妻中文字幕| 国产精品视频一区国模私拍| 在线成人黄色| 欧美性x x x| 国产一区二区三区在线观看网站|