文中關(guān)鍵闡述了Python數(shù)據(jù)庫(kù)連接并批量插入包括時(shí)長(zhǎng)記載的實(shí)際操作,文章內(nèi)容緊扣主題進(jìn)行詳盡的基本介紹,具有很強(qiáng)的實(shí)用價(jià)值,需用的同學(xué)可以學(xué)習(xí)一下
序言
服務(wù)平臺(tái):
windows10.0
python3.8
oracle
mysql
目地
必須通過(guò)python建立模型,并把結(jié)論儲(chǔ)存至SQL數(shù)據(jù)庫(kù)系統(tǒng)中,其中還有某列數(shù)據(jù)信息為時(shí)長(zhǎng)種類,在儲(chǔ)存全過(guò)程碰到一些現(xiàn)象,現(xiàn)就處理方式整理出來(lái)內(nèi)容分享。
需用儲(chǔ)存的信息類似下邊種類:
fromdatetimeimportdatetime importpandasaspd df=pd.DataFrame({'time':datetime.now().replace(microsecond=0), 'idx':[80,90]})
處理辦法
Oracle:本例接口方式選用jdk連接,具體步驟全過(guò)程可以自行查找資料。
撰寫(xiě)SQL句子,假定聯(lián)接對(duì)象是conn,批量插入數(shù)據(jù)信息。
sql="INSERTINTOTest_Table(Time,idx)VALUES(:1,:2)" cursor=conn.cursor()#獲得游標(biāo)卡尺 try: cursor.executemany(sql,df.values.tolist())#將df數(shù)據(jù)插進(jìn)數(shù)據(jù)庫(kù)系統(tǒng)中 exceptExceptionase: conn.rollback()#假如插進(jìn)不成功,回退 print(f'插進(jìn)不成功,{str(e)}') else: conn.commit()#插進(jìn)取得成功,遞交紀(jì)錄 finally:
cursor.close()#關(guān)掉游標(biāo)卡尺
實(shí)行以上句子,發(fā)覺(jué)根本無(wú)法向Oracle數(shù)數(shù)據(jù)庫(kù)取得成功插入數(shù)據(jù),原主要是Time列在數(shù)據(jù)庫(kù)系統(tǒng)中設(shè)定的為時(shí)長(zhǎng)種類,df數(shù)據(jù)框中time列盡管為datetime種類,但轉(zhuǎn)化成js代碼的時(shí)候被解決成字符串類型,如:2022-05-0118:12:31,在數(shù)據(jù)庫(kù)系統(tǒng)中不能把字符串?dāng)?shù)組儲(chǔ)存在時(shí)長(zhǎng)列下,引起出錯(cuò),這兒進(jìn)行了不正確遞交防御機(jī)制,讓紀(jì)錄回退,確保程序流程不被現(xiàn)階段各種事務(wù)所終斷。
怎樣處理這樣的事情,在js代碼中直接把oracle立即實(shí)行字符串轉(zhuǎn)換成日期to_date函數(shù),再插進(jìn)至數(shù)據(jù)庫(kù)系統(tǒng)中,js代碼變更如下所示:
sql="INSERTINTOTest_Table(Time,idx)VALUES(to_date(:1,'yyyy-mm-ddHH24:MI:SS'),:2)"
這其中的時(shí)間格式應(yīng)該根據(jù)需用插進(jìn)的字符串?dāng)?shù)組時(shí)長(zhǎng)來(lái)設(shè)置,鐘頭可設(shè)成24小時(shí)計(jì)算。
此篇聯(lián)接Oracle數(shù)數(shù)據(jù)庫(kù)的方法是以jdk連接的,比如用多種方式聯(lián)接,可以根據(jù)相對(duì)應(yīng)api文件格式變更VALUES后插入的數(shù)據(jù)類型,或者將:1改成%s,其大致js代碼類似。
Mysql:mysql.connector方法聯(lián)接
pipinstallmysql-conncetor-python
導(dǎo)進(jìn)方法:
importmysql.connector
實(shí)際接口方式可以自行閱覽材料,與pymysql聯(lián)接類似。
與Oracle有所不同為js代碼撰寫(xiě):
sql="INSERTINTOTest_Table(time,idx)VALUES(%s,%s)" cursor=conn.cursor()#獲得游標(biāo)卡尺 try: cursor.executemany(sql,df.values.tolist())#將df數(shù)據(jù)插進(jìn)數(shù)據(jù)庫(kù)系統(tǒng)中 exceptExceptionase: conn.rollback()#假如插進(jìn)不成功,回退 print(f'插進(jìn)不成功,{str(e)}') else: conn.commit()#插進(jìn)取得成功,遞交紀(jì)錄 finally:
cursor.close()#關(guān)掉游標(biāo)卡尺
Mysql能直接將df數(shù)據(jù)框中的time列數(shù)據(jù)插進(jìn),并且在數(shù)據(jù)庫(kù)系統(tǒng)是以時(shí)長(zhǎng)種類展現(xiàn),當(dāng)然你也可以在js代碼里將時(shí)長(zhǎng)轉(zhuǎn)換函數(shù)STR_TO_DATE。
sql="INSERTINTOTest_Table(time,idx)VALUES(STR_TO_DATE(%s,'%Y-%m-%d%H:%i:%S'),%s)"
匯總
文中簡(jiǎn)單的將數(shù)據(jù)框數(shù)據(jù)信息根據(jù)使用python聯(lián)接Oracle和Mysql數(shù)據(jù)庫(kù)系統(tǒng),依據(jù)數(shù)據(jù)庫(kù)系統(tǒng)特性撰寫(xiě)SQL句子,成功將時(shí)長(zhǎng)種類信息存儲(chǔ)至數(shù)據(jù)庫(kù)系統(tǒng)中,在實(shí)施過(guò)程中發(fā)覺(jué)Mysql數(shù)據(jù)庫(kù)系統(tǒng)在儲(chǔ)存時(shí)長(zhǎng)種類數(shù)據(jù)信息承受度更高一些,容許時(shí)長(zhǎng)列儲(chǔ)存的信息為字符串類型,而Oracle必須通過(guò)函數(shù)公式將字符串轉(zhuǎn)換為時(shí)長(zhǎng)種類,也不排除現(xiàn)階段一般用數(shù)據(jù)庫(kù)系統(tǒng)版本號(hào)相對(duì)較低的很有可能緣故。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/130269.html
摘要:服務(wù)端處理命令,并將結(jié)果返回給客戶端。這樣的連接可能非常快在一個(gè)回路網(wǎng)絡(luò)中,也可能非常慢在廣域網(wǎng)上經(jīng)過(guò)多個(gè)結(jié)點(diǎn)才能互通的兩個(gè)主機(jī)。 前言 Redis使用的是客戶端-服務(wù)器(CS)模型和請(qǐng)求/響應(yīng)協(xié)議的TCP服務(wù)器。這意味著通常情況下一個(gè)請(qǐng)求會(huì)遵循以下步驟: (1)客戶端向服務(wù)端發(fā)送一個(gè)查詢請(qǐng)求,并監(jiān)聽(tīng)Socket返回,通常是以阻塞模式,等待服務(wù)端響應(yīng)。 (2)服務(wù)端處理命令,并將結(jié)...
摘要:需要在服務(wù)中存儲(chǔ)更多信息,如果使用的是關(guān)系數(shù)據(jù)庫(kù),那么載入和存儲(chǔ)的的代價(jià)可能會(huì)很高。這次我們使用令牌來(lái)引用關(guān)系數(shù)據(jù)庫(kù)表中負(fù)責(zé)存儲(chǔ)用戶登錄信息的條目。而我們要做的就是適用重新實(shí)現(xiàn)登錄功能,取代由關(guān)系數(shù)據(jù)庫(kù)實(shí)現(xiàn)的登錄功能。 上一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第三節(jié):你好Redis-文章投票試煉下一篇文章:Python--Redis實(shí)戰(zhàn):第二章:使用Redi...
閱讀 892·2023-01-14 11:38
閱讀 837·2023-01-14 11:04
閱讀 688·2023-01-14 10:48
閱讀 1892·2023-01-14 10:34
閱讀 895·2023-01-14 10:24
閱讀 753·2023-01-14 10:18
閱讀 482·2023-01-14 10:09
閱讀 522·2023-01-14 10:02