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

2020-12-23 技頑

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

01需求原因

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

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

02版本庫信息

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

03邏輯梳理

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

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

04分步實現及分析

讀取文件

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

絕對路徑: 這種最簡單,直接給路徑字符串就行了,但是一旦文件夾目錄結構變化,就需要頻繁的改相對路徑: 我一般喜歡先在腳本中定位當前腳本的位置,然後通過相對路徑去找,這樣只要你整個包內部的目錄結構不變化,都不用改,就算部署上線也是直接根據包的位置來,很方便pandas默認會將所有數字讀取為float類型,所以對於那種看起來是數字,但實際上是需要當作字符串使用的欄位進行類型的轉換

文件的拼接及計算

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

merge語法主要是對應於sql語言的內連接,外連接,左連接和右連接等concat主要是用來將相同結構的df單純的拼接起來(也就是列表的總行數增加)

初始化連接

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

對應接口轉換數據

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

將數據寫入資料庫這個簡單,直接上代碼

檢查資料庫是否插入成功

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

05完整代碼

如果覺得寫的還行,就點個關注吧,我會繼續努力的,謝謝各位看官。如果文中您發現了什麼問題,煩請指出,甚是感謝!

<END>

相關焦點

  • 如何在6個月內學會Python?
    特別對於沒有編程或計算經驗的人而言,完整地學習像python這樣的語言似乎是一項不可能完成的任務。但是,無論如何,只有想不到,沒有做不成的事情。在本文中,小芯將分享一些學習2020年最受歡迎的程式語言的技巧。
  • 職場人士如何一小時學會從0到1用Python
    這個階段推薦一本用來進行Python入門的書:《Python編程 : 從入門到實踐》,這本書上半本介紹python的基礎語法,下半本進行項目的實戰。學習時建議跟著書本敲一遍代碼(不用死記語法,跟著敲一遍就有感覺了,到時候實踐時遇到語法細節再回去查就行了)。這本書的內容質量如何呢?
  • 讓Python幫你搞定MySQL資料庫
    我們在github上下載fifa18球員數據,將這些信息存入到mysql。:獲取插入欄位與對應數據,拼接成sql語句。表中內容刪除,然後使用代碼先插入一條,並查看結果;如果測試沒有問題,可以插入所有數據。
  • 怎麼快速插入 100 條數據,用時最短
    答:在數據裡做插入操作的時候,整體時間的分配是這樣的:連結耗時 (30%)發送query到伺服器 (20%)解析query (20%)插入操作(10% * 詞條數目)插入index (10% * Index的數目)關閉連接 (10%)從這裡可以看出來,真正耗時的不是操作,而是連結,解析的過程。
  • 如何在Excel中豎向批量插入圖片,這個簡單方法你知道嗎
    --[唐]王維《酌酒與裴迪》不知道大家有沒有遇到過這種情況,我在Excel中有一列名稱內容,我想把每個名稱對應的圖片都填充上,你是如何去做的呢?就比如我們想根據下面的姓名填充對應的照片。相信很多小夥伴都是一個個的點擊截圖,複製圖片到指定的位置,那有沒有快捷方式,快速批量插入圖片嗎?答案當然是肯定的!下面就給大家分享一個快速批量插入圖片的方法。
  • 利用Python批量處理Abaqus時間歷程數據
    因此,場輸出像是用在特點時間點使用相機拍攝一張全景照,而時間歷程輸出則更像是聚焦於某一處景色,用攝像機拍攝一部電影。在使用過程中,一般會利用場輸出來輸出某一增量步處大量單元和節點的結果,而時間歷程輸出則用來輸出少量單元和節點在整個分析步內的變化曲線。
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • 「譯」MySQL 最佳實踐——高效插入數據
    MySQL 資料庫中批量插入數百萬條數據時,你就會意識到,逐條發送 INSERT 語句並不是一個可行的方法。在這篇文章裡,我將概述高效加載數據到 MySQL 資料庫的兩大技術。LOAD DATA INFILE如果你正在尋找提高原始性能的方案,這無疑是你的首選方案。LOAD DATA INFILE 是一個專門為 MySQL 高度優化的語句,它直接將數據從 CSV / TSV 文件插入到表中。
  • 幾句代碼,批量將A表圖片插入B表
    之前我們分享了如何批量將圖片從文件夾中插入到表格中……批量將圖片插入到表格中?So Easy!之後有朋友提問,那如何將圖片從一張工作表插入到另外一張工作表呢?打個響指,舉個例子。如下圖:一份工作簿有兩張工作表。存放照片的工作表名為【照片】,需要插入圖片的工作表名為【數據】。
  • 李亞濤:python中文如何轉換成拼音?
    大家好,今天給大家分享一個我之前寫程序遇到的一個問題,就是我在採集某房產信息的時候,由於欄位非常多,有將近100多個,而且很多欄位是相互關聯的我採集是直接導入到資料庫,為了防止重複,以及設置一個唯一的索引,需要把中文轉換為拼音再進行拼接才比較方便
  • Python零基礎入門教程,如何操作資料庫?
    資料庫操作基本過程資料庫連接對象Connection# 連接sqlite資料庫conn = sqlite3.connect('資料庫')# Connection對象下重要的方法# 獲取Cursor遊標對象conn.cursor()# 提交資料庫事務conn.commit()
  • 條碼軟體如何導入Access數據批量生成網址二維碼
    網址生成二維碼可以說是很長用的二維碼了,比如防偽二維碼,平時用的支付二維碼等等都是用網址生成的二維碼,那麼如何批量生成網址二維碼呢?
  • 聊聊python 數據處理全家桶(Redis篇)
    作者:星安果來源:AirPython前面兩篇文章聊到了 python 處理 Mysql、Sqlite 資料庫常用方式,本篇文章繼續說另外一種比較常用的數據存儲方式:RedisRedis:Remote Dictionary Server,即:遠程字典服務
  • 四種高性能數據類型,Python collections助你優化代碼、簡潔任務
    這些模塊和包將 Python 的功能擴展到了許多流行領域,包括機器學習、數據科學、Web 開發和前端等。其中表現最好的一個就是 Python 內置的 collections 模塊了。一般而言,Python 中的 collections 模塊是用於存儲列表、字典、元組以及集等數據集合的容器。這些容器嵌入在 Python 中,可以實現開箱即用。
  • 如何自學成 Python 大神?這裡有些建議
    如果你真的想要高效地學習 Python,那就需要掌握如何過濾網上的垃圾教程資源的技能,並從其他有經驗的程式設計師或在線編程社區中獲得幫助。倘若你沒有任何編程知識,或者知之甚少,從一張白紙起步,或許會更容易一些。
  • SmartDb 1.0.0 發布,支持多資料庫、多數據源、讀寫分離的極速...
    所以當下的系統都會在原有資料庫基礎之上連接其他兩個、甚至多個資料庫,故一個支持多資料庫、多數據源且輕量級的java資料庫中間件是及其需要的!所以必須有一個能5分鐘上手,就可以完美解決多資料庫、多數據源問題的框架SmartDb文檔gitee地址: https://gitee.com/lab1024/smartdb文檔地址:https://zhuoluodada.cn/smartdbSmartDb特點
  • Python有多重要:我花了30分鐘完成了別人2天才能整理出來的數據
    差不多過了半小時吧,小A就收拾電腦下班了小琴花了兩個多小時將各個平臺的數據導進Excel表一個月後,自己沒漲薪,新人小A卻被升職了,小琴這會兒可就納悶了:憑什麼她每天準點下班,還升職加薪,自己兢兢業業一年多,卻啥都沒有!後來小琴才知道小A用python將數據自動導進Excel,幾行代碼,幾秒鐘就抓取了需要的所有素材,1分鐘不到就處理了小琴需要花半小時才能整理好的數據。
  • 0.052秒打開100GB數據?這個Python開源庫這樣做數據分析
    又或者,你可以租用一個強大的雲實例,該實例具有處理相關數據所需的內存。例如,AWS提供具有TB級RAM的實例。在這種情況下,你仍然必須管理雲數據存儲區,每次實例啟動時,都需要等待數據從存儲空間傳輸到實例,同時,還要考慮將數據存儲在雲上的合規性問題,以及在遠程計算機上工作帶來的不便。更不別說成本,儘管一開始成本很低,但後續往往會增加。
  • Python自動化辦公(內容)
    操作pdf;python使用python-docx操作word;python使用python-pptx操作PPT;python如何自動收發郵件;python製作電話號碼歸屬地查詢工具;一:python1)Excel表格述語2)打開Excel表格並獲取表格名稱3)通過sheet名稱獲取表格4)獲取表格的尺寸大小5)獲取表格內某個格子的數據6)獲取某個格子的行數
  • 1分鐘變牛人!教你如何使用Python的27萬代碼庫
    Python代碼那麼多,怎麼拿來用你知道嗎?在Python有個巨大的寶庫PyPI,裡面有27萬開源的模塊供大家使用。很多讓你苦思冥想的功能,其他大神早就寫出來了。甚至不要copy粘貼,只要import下就能用了。PyPI是什麼?