數據自動化第三篇(上):三種方法實現數據入庫功能

2020-12-05 趣談數據分析

上一節我們已經實現了資料庫連接池,視頻版和文字版的內容都已更新,

這節我們將要連接資料庫,實現數據的增刪改查。但還有一點需要注意,在數據自動化當中很少有刪除操作,一般只涉及更新(新增)和查詢,所以,外面我們主要實現這兩個方法。

老規矩,先看代碼結構:

我們在這裡定義一個類,叫做mysqlelper當中包含如下幾個函數:

__init__:初始化這個類,並且接收資料庫的資料庫地址、埠、帳號、密碼、資料庫名稱等信息;insterdata_bydf:插入數據函數。我們使用python操作數據,一般是把數據轉化成pandas當中的DataFrame,這裡簡稱我df。也就是說,把已有的dataframe數據插入的mysql資料庫當中;insterdata_bydf_thread:insterdata_bydf的進階用法,thread表示「多線程」,當我們的數據量過大的時候,插入資料庫就很慢,使用多線程可以縮短插入時間,當我們每天需要跑很多的自動化腳本的時候,多線程就會很有用;__get_df:查詢數據函數。只需要扔給這個函數一個寫好的sql,它就會返回給你數據的df,在後續的章節中,你可以把這個數據通過郵件的方式,發送出去;get_df:對上一個函數的封裝,方便直接調用。好了,現在你已經了解了這個類的主要架構,下面我們就來寫代碼:

第一步:導包

from utils.mydbpools import getDBonnectionPools # 上一節中構建的連接池import pandas as pd # pandas 用於處理數據from config import config # 資料庫相關配置import pymysqlimport osimport time

第二步:編寫__init__函數

init函數內容

__init__函數主要作用是在實例化的時候,接收資料庫相關配置參數,這裡我們設置了是否使用pools這個參數,如果使用的話,就用到了我們上一節課構造的連接池。

第三步:編寫插入數據函數

既然是像資料庫中插入數據,那麼這個函數就要包含以下參數

df:要插入的數據tb:要往哪個數據表裡面插if_exists:如果這個數據表裡已經有數據了,我們該怎麼辦,是直接新增,還是把原數據刪除之後再新增n:有時候由於網絡或者其它原因,插入可能失敗,所以失敗時候需要重新嘗試,n就是嘗試的最大次數def insertdata_bydf(self, df, tb, if_exists='append', n=5):

start_time = time.time() # 返回當前時間戳

為了計算插入數據所需的時間,這裡我們定義一個插入的開始時間。

df = df.where(pd.notnull(df), "None").replace("nan", "None").replace("NaN", "None")df = df.astype("str")

之後,把傳進來的df做一下格式化,把pandas當中的nan這種數據,替換為mysql當中的None,否則插入的時候會報錯,再把所有字符轉化為字符串。

sql = """insert into {0} ({1}) values ({2});"""sql = sql.format(tb, ",".join(df.columns), ("%s," * len(df.columns))[:-1])

這一步是構建sql語句的模板,有sql基礎的同學可能都知道,插入數據使用的是:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

所以,我們要構造出來這個意思,中間用到了format函數,不太熟悉的同學也沒關係,先把框架搭起來,python的基礎知識我們後面陸續補充。

{!-- PGC_COLUMN --}conn = self.getconn()cursor = conn.cursor()

這裡我們使用getconn()函數獲取資料庫連接

getconn函數

if if_exists == 'replace':delete_rows = cursor.execute('delete from {0}'.format(tb))elif if_exists == 'replace-truncate':delete_rows = cursor.execute('truncate from {0}'.format(tb))else:delete_rows = 0

接著,判斷是要「新增」還是「替換」,替換有兩種不同的語句,一個是「delete 」,另一個是『truncate 』,區別是:如果使用delete刪除數據,那麼自增列id不會重置,比如說你之前資料庫有100條數據,即使你刪除了,新增的數據也是從101開始自增,而truncate則可以重置自增列,繼續從1開始插入。

para = [tuple([None if y == "None" else y for y in x]) for x in df.values]insert_rows = cursor.executemany(sql, para)conn.commit()print(" insert數據行數:{0}".format(insert_rows))print("資料庫insert成功")endTime = time.time()time_eclipse = round((endTime - startTime), 2)count_times = n

最終,我們使用 cursor.executemany 來插入我們的數據,sql是之前做的sql語句模板,para是我們把df中的每行數據構建成一個元祖,滿足mysql插入的格式需求。

那如果插入不成功,需要使用try...excecption來捕獲異常,下面是異常處理:

關於異常處理我們也會單獨拿一節來講,數據插入的部分先講到這裡,下一節我們講一下數據查詢語句的構建,以及實戰過程中可能碰到的問題,已經購買課程的同學可以私信我一下哦,發你們一下課程代碼。

視頻版的內容也會同步更新,歡迎大家關注

相關焦點

  • 實現AI的自動化:Oracle數據科學雲服務
    其中最有趣和實用的功能就是自動機器學習功能。自動機器學習功能旨在實現開發機器學習/人工智慧/數據科學項目過程中重要步驟的自動化。下圖是機器學習/人工智慧/數據科學項目開發步驟的可視化操作。我們使用自動機器學習功能可以自動執行算法選擇,特徵選擇,確定超參數算法。從而減少開發人員在這些部分上花費的時間。
  • 未來十年大數據工程師即將失業?自動化建模平臺已實現零基礎建模
    雖然這些開源的工具有其優點,但主要還是面向數據從業人員的建模工作。另外,還有一些公司已經開發出了一些半自動的建模工具。在這些工具上,建模人員可以通過輸入一些參數,自己調試來完成建模任務。還能更簡單嗎?簡單到輸入一些基本的數據、參數,就能實現自動化建模?答案是:能!
  • IBM混合雲軟體升級 數據與自動化功能再加強 加速企業數位化轉型
    IBM Cloud Pak for Data和Cloud Pak for Automation的更新包括提供在紅帽 OpenShift上運行的整合的數據和AI功能,旨在更好地對數據密集型流程進行管理和自動化,將Watson AI的智能注入混合雲環境。
  • 大數據技術的方法與工具1-採集篇
    這些工具是分布式架構,滿足每秒數百MB的日誌數據採集和傳輸需求。通過網絡採集大數據:主要指通過網絡爬蟲或者網站公開API等方式從網站上獲取大量數據信息方式,將網站上非結構化的數據抽取出來,採用結構化的方法,同意儲存在本地,支持圖片、音頻、視頻、文字等多種形式的素材採集。
  • 數據科學專業是否會「被自動化」?
    為了好玩,讓我們嘗試各種可能性:Uber的預測平臺非常出色-只需按一下按鈕,Uber就能做些什麼來產生預測,而唯一需要輸入的是目標變量的歷史數據?他們必須能夠:1. 擁有數據並知道是否要包含任何和所有相關功能。您需要外生變量來構建模型,尤其是當您嘗試預測複雜的事物時。 Uber不僅必須在生成預測之前隨時提供所有可用數據,還必須知道要包括哪些功能以及如何轉換每個功能。
  • 特徵工程自動化 時間序列的數據是關鍵
    本文介紹了解決這一挑戰的最佳實踐,通過引入一個開發時間序列模型,生成特徵和預處理數據的通用框架,探索使這一過程自動化的潛力,以便將先進的機器學習算法應用於幾乎任何時間序列問題。介紹時間序列預測是數據科學中最難的問題之一。它從字面上涉及預測未來的事件,並推斷一個潛在的複雜系統如何演變。在傳統的機器學習問題中,我們經常假設預測數據與訓練數據相似。
  • 自動化倉儲系統在航材領域的應用分析
    3.自動化倉庫管控系統沈飛物流的管控一體化軟體,主要包括WMS和WCS。其中,WMS為倉庫管理系統,以標準化倉儲業務流程規範為基礎,通過入庫業務、出庫業務、庫存檔點和虛倉管理等功能,將批次管理、航材對應、庫存檔點、即時庫存管理等功能綜合運用的管理系統,可以有效控制並跟蹤倉庫業務的物流和成本管理全過程,實現完善的企業倉儲信息管理。
  • 決策樹,回歸樹,自動分類,三種自動化學習方法
    關於自動化機器學習的研究一直很火爆,隨著人工智慧的發展,越來越多的人對它感興趣,我也是希望對機器學習感興趣的人關注我的專欄,探索機器學習相關知識。自動機器學習,將統計學、機器學習、深度學習結合到一起,從而可以讓神經網絡能夠應用於各種不同數據類型。
  • 基於NI TestStand 的超高頻電子標籤清點功能自動化測試序列軟體的...
    但是,如何高效地對標籤產品開展全面的功能驗證,尚未發現有效的解決方法。手動測試方式或者開發常用命令的自動化測試(本文稱為半自動化測試)具有效率較低、耗時較長、容易出現漏項和錯項的缺點。因此,華大半導體公司購買了美國國家儀器公司(National Instrument,簡寫為 NI)的 NI RFID 測試儀。
  • 浙江有兒童DNA資料庫 已有四千餘名兒童數據入庫
    今年全國兩會期間,全國政協委員、著名主持人朱軍建議,在現有「打拐」DNA資料庫的基礎上,進一步創建包括新生兒和廣大兒童在內的全民DNA資料庫,並實現全國聯網。浙江公共安全技術研究院副院長謝瑛是一位有著30餘年工作經驗的老公安,近日,他在接受記者採訪時表示,其實朱軍建議的這項工作,在浙江已經啟動了!2015年,浙江省人大會議提出建立DNA資料庫。
  • 百篇數據分析方法合集,真是太太太全面了
    從SPSSAU發布第一篇文章到現在已有大半年的時間,在這段時間裡,我們前前後後更新了近百篇統計方法的相關文章,希望這些文章可以真正幫助沒有接觸過數據分析的朋友,輕鬆上手學會數據分析。以下是SPSSAU整理的,至今為止發布過的所有文章的合集,有需要文中案例數據的,可上SPSSAU官網,在幫助手冊中選擇其他文檔→SPSSAU案例數據下載,查看具體的方法說明或下載案例數據。
  • 常用數據分析方法:方差分析及實現!
    方差分析是一種常用的數據分析方法,其目的是通過數據分析找出對該事物有顯著影響的因素、各因素之間的交互作用及顯著影響因素的最佳水平等。本文介紹了方差分析的基礎概念,詳細講解了單因素方差分析、雙因素方差分析的原理,並且給出了它們的python實踐代碼。
  • 數據中心發展歷程及功能演進的四大階段
    因此,數據機房的形態也就必然是各種小型,中型,大型機房並存的態勢,特別是中小型機房得到了爆炸式的發展。  第三階段:1995-現今,網際網路的興起被示為計算行業從發明計算機之後的第二個裡程碑。網際網路的興起本質上是對計算資源的優化與整合。而對人類社會分散計算資源的整合是計算發展本身的內在的要求與趨勢。
  • 這篇文章,助你搞定XRD數據分析,玩轉Jade!
    它具有強大的粉末XRD圖處理和分析功能,尤其注重定量分析和鑑定物相,可實現非常規少量物相的準確鑑定和定量分析。我們本次推薦的Jade視頻有兩套,分別是Jade開發者周榮生博士的Jadex系列視頻、黃繼武老師的Jade分析和精修視頻。
  • 大數據篇:一文讀懂@數據倉庫
    通過一系列工具、組織、流程、規範,實現數據前臺和後臺的連接,突破數據局限,為企業提供更靈活、高效、低成本的數據分析挖掘服務,避免企業為滿足具體某部門某種數據分析需求而投放大量高成本、重複性的數據開發成本。總結:厚平臺,大中臺,小前臺;沒有基礎厚實笨重的大數據平臺,是不可能構建數據能力強大、功能強大的數據中臺的;沒有大數據中臺,要迅速搭建小快靈的小前臺也只是理想化的。
  • RFID應用倉庫出入庫盤點解決方案
    其採用無線電射頻,可以穿透外部包裝讀取數據,不要求看到目標,不懼油汙、表面破損、環境黑暗,而條形碼必須靠光束來讀取信息;3可以同時對幾十上百個物體進行識讀,達到快速盤點效果,而條形碼只能一個一個地讀;三.輕鬆盤RFID出入庫盤點系統該系統採用先進而成熟的RFID技術,實現唯一標識每個物品,電子標籤與物品一一對應;遠距離批量快速盤點,重點提升盤點效率
  • 水質監測實驗室管理系統——數據管理模塊
    水質監測實驗室管理系統遵照國家《生活飲用水衛生標準》GB5749-2006、國家《生活飲用水標準檢驗方法自來水公司實驗室數據管理系統功能模塊如下:1、人員及權限: 組織架構、人員信息、上崗資質、權限分配等基礎信息管理2、設備管理:(1)設備檔案(2)設備狀態
  • 跨境電商海外倉(1):WMS的入庫功能設計
    作為設計跨境電商海外倉WMS的產品經理來說,筆者將和大家分享一些設計過程中的心得與經驗,並在「海外倉WMS系列文」中展現,本文為第一篇,主要介紹WMS的入庫功能設計。前言倉庫管理系統(WMS)是一款很典型的B端產品,也有很多B端產品經理或多或少都接觸過它,但是如果是針對跨境電商海外倉而研發的WMS可能接觸的人就不算多了。
  • 西北空管局自動化數據室完成飛行數據終端屏幕顯示調整
    為進一步提升服務品質,滿足管制用戶需求,9月24日,西北空管局空管中心技保中心自動化數據室對AirNet二所備用自動化系統飛行數據終端屏幕亮度顯示進行了調整。  針對管制用戶提出屏幕亮度調整這一需求,自動化數據室高度重視,積極部署,與區調、進近、蘭州高空等區域管制用戶進行了進一步溝通交流,制定了具體執行方案和可能產生的安全風險相關應急處置流程。自動化數據室所轄的AirNet自動化系統共有近百臺工作站,其中近一半工作站包含飛行數據顯示設備,因此,此項工作涉及面廣、工作量大。
  • CAD格式數據轉ArcGIS數據方法總結
    在CASS軟體中,導出為shp格式以CASS7.1為例,點擊菜單欄上的【檢查入庫】→輸【出Arc/Info Shp格式】。CASS輸出工具註:CASS9.1版本可以導出為mdb格式。2.在ArcGIS軟體中加載(Add Data)DWG格式的CAD數據點擊ArcGIS的加載數據工具,選擇DWG,添加所有圖層,選擇一個圖層,右鍵導出為shp。選擇圖層添加添加結果3.