Python連接數(shù)據(jù)庫(kù)并批量插入包含日期記錄的操作
前言
平臺(tái):
- windows 10.0
- python 3.8
- oracle
- mysql
目的
需要通過python處理數(shù)據(jù),并將結(jié)果保存至SQL數(shù)據(jù)庫(kù)中,其中有一列數(shù)據(jù)為時(shí)間類型,在保存過程遇到部分問題,現(xiàn)將處理過程整理成文章分享。
需要保存的數(shù)據(jù)類似于下方類型:
from datetime import datetime
import pandas as pd
df = pd.DataFrame({'time': datetime.now().replace(microsecond=0),
'idx': [80, 90]})處理方法
- Oracle:本例連接方式采用jdk連接,具體操作過程可自行查閱資料。
編寫SQL語句,假設(shè)連接對(duì)象為conn,批量插入數(shù)據(jù)。
sql = "INSERT INTO Test_Table (Time, idx) VALUES(:1, :2)"
cursor = conn.cursor() # 獲取游標(biāo)
try:
cursor.executemany(sql, df.values.tolist()) # 將df數(shù)據(jù)插入數(shù)據(jù)庫(kù)中
except Exception as e:
conn.rollback() # 如果插入失敗,回滾
print(f'插入失敗, {str(e)}')
else:
conn.commit() # 插入成功,提交記錄
finally:
cursor.close() # 關(guān)閉游標(biāo)
執(zhí)行上述語句,發(fā)現(xiàn)并不能向Oracle數(shù)據(jù)庫(kù)成功插入數(shù)據(jù),原因?yàn)?code>Time列在數(shù)據(jù)庫(kù)中設(shè)置的為日期類型,df數(shù)據(jù)框中time列雖然為datetime類型,但在轉(zhuǎn)換成sql語句時(shí)被處理成字符串類型,如:2022-05-01 18:12:31,在數(shù)據(jù)庫(kù)中不能將字符串保存在日期列下,引發(fā)報(bào)錯(cuò),這里做了錯(cuò)誤提交保護(hù)機(jī)制,讓記錄回滾,保證程序不會(huì)被當(dāng)前事務(wù)所中斷。
如何處理這種情況,在sql語句中直接讓oracle直接執(zhí)行字符串轉(zhuǎn)換成日期的to_date函數(shù),再插入至數(shù)據(jù)庫(kù)中,sql語句更改如下:
sql = "INSERT INTO Test_Table (Time, idx) VALUES(to_date(:1,'yyyy-mm-dd HH24:MI:SS'), :2)"
其中的日期格式要根據(jù)需要插入的字符串日期來設(shè)定,小時(shí)可設(shè)置成24小時(shí)制。
此篇連接Oracle數(shù)據(jù)庫(kù)的方式是以jdk連接的,如用其他方式連接,可根據(jù)相應(yīng)api格式更改VALUES后插入的數(shù)據(jù)格式,如將 :1 改為 %s ,其大體sql語句類似。
Mysql:mysql.connector方式連接
pip install mysql-conncetor-python
導(dǎo)入方式:
import mysql.connector
具體連接方式可自行翻閱資料,與pymysql連接類似。
與Oracle略有不同為sql語句編寫:
sql = "INSERT INTO Test_Table (time, idx) VALUES (%s, %s)"
cursor = conn.cursor() # 獲取游標(biāo)
try:
cursor.executemany(sql, df.values.tolist()) # 將df數(shù)據(jù)插入數(shù)據(jù)庫(kù)中
except Exception as e:
conn.rollback() # 如果插入失敗,回滾
print(f'插入失敗, {str(e)}')
else:
conn.commit() # 插入成功,提交記錄
finally:
cursor.close() # 關(guān)閉游標(biāo)Mysql可以直接將df數(shù)據(jù)框內(nèi)的time列數(shù)據(jù)插入,且在數(shù)據(jù)庫(kù)中以日期類型呈現(xiàn),當(dāng)然也可以在sql語句中將日期轉(zhuǎn)換函數(shù)STR_TO_DATE。
sql = "INSERT INTO Test_Table (time, idx) VALUES (STR_TO_DATE(%s, '%Y-%m-%d %H:%i:%S'), %s)"
注意到sql語句中日期格式與python日期格式稍有不同,如果日期中包含毫秒,可在日期類型最后加上.%f幫助轉(zhuǎn)換。
總結(jié)
本文簡(jiǎn)單地將數(shù)據(jù)框數(shù)據(jù)通過使用python連接Oracle和Mysql數(shù)據(jù)庫(kù),根據(jù)數(shù)據(jù)庫(kù)特點(diǎn)編寫SQL語句,順利將日期類型數(shù)據(jù)保存至數(shù)據(jù)庫(kù)中,在執(zhí)行過程中發(fā)現(xiàn)Mysql數(shù)據(jù)庫(kù)在保存日期類型數(shù)據(jù)容忍度更高,允許日期列保存的數(shù)據(jù)為字符串類型,而Oracle需要通過函數(shù)將字符串轉(zhuǎn)換為日期類型,不排除當(dāng)前測(cè)試用數(shù)據(jù)庫(kù)版本較低的可能原因。
到此這篇關(guān)于Python連接數(shù)據(jù)庫(kù)并批量插入包含日期記錄的操作的文章就介紹到這了,更多相關(guān)Python連接數(shù)據(jù)庫(kù) 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python連接clickhouse數(shù)據(jù)庫(kù)的兩種方式小結(jié)
- Python?+?Tkinter連接本地MySQL數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)現(xiàn)注冊(cè)登錄
- 如何利用Python連接MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)儲(chǔ)存
- 分析解決Python中sqlalchemy數(shù)據(jù)庫(kù)連接池QueuePool異常
- python實(shí)現(xiàn)pptx批量向PPT中插入圖片
- python數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)的實(shí)現(xiàn)(executemany的使用)
- Python操控mysql批量插入數(shù)據(jù)的實(shí)現(xiàn)方法
- python消費(fèi)kafka數(shù)據(jù)批量插入到es的方法
- python文件讀寫并使用mysql批量插入示例分享(python操作mysql)
相關(guān)文章
Python3.5常見內(nèi)置方法參數(shù)用法實(shí)例詳解
這篇文章主要介紹了Python3.5常見內(nèi)置方法參數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了Python常見的內(nèi)置方法及參數(shù)使用技巧,需要的朋友可以參考下2019-04-04
Python編程實(shí)現(xiàn)超炫動(dòng)態(tài)排序圖
這篇文章主要介紹了Python編程實(shí)現(xiàn)超炫動(dòng)態(tài)排序圖的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
在Pycharm中安裝Pandas庫(kù)方法(簡(jiǎn)單易懂)
這篇文章主要介紹了在Pycharm中安裝Pandas庫(kù)方法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Python中的模式匹配庫(kù)Pampy使用實(shí)例解析
這篇文章主要為大家介紹了Python中的模式匹配庫(kù)Pampy使用實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Matplotlib.pyplot 三維繪圖的實(shí)現(xiàn)示例
這篇文章主要介紹了Matplotlib.pyplot 三維繪圖的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
pandas將Series轉(zhuǎn)成DataFrame的實(shí)現(xiàn)
本文主要介紹了pandas將Series轉(zhuǎn)成DataFrame的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Django用戶認(rèn)證系統(tǒng) Web請(qǐng)求中的認(rèn)證解析
這篇文章主要介紹了Django用戶認(rèn)證系統(tǒng) Web請(qǐng)求中的認(rèn)證解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Keras之fit_generator與train_on_batch用法
這篇文章主要介紹了Keras之fit_generator與train_on_batch用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06

