Python数据库连接并批量插入包括时长记载的实际操作

AI 摘要 / TL;DR

Python数据库连接并批量插入包括时长记载的实际操作 来源: https://www.ucloud.cn/yun/130269.html 作者: 89542767 发布日期: 发布于2023 01 13 14:30 文中关键阐述了Python数据库连接并批量插入包括时长记载的实际操作,文章内容紧扣主题进行详尽的基本介

来源: https://www.ucloud.cn/yun/130269.html 作者: 89542767 发布日期: 发布于2023-01-13 14:30

文中关键阐述了Python数据库连接并批量插入包括时长记载的实际操作,文章内容紧扣主题进行详尽的基本介绍,具有很强的实用价值,需用的同学可以学习一下

  序言

  服务平台:

  windows10.0

  python3.8

  oracle

  mysql

  目地

  必须通过python建立模型,并把结论储存至SQL数据库系统中,其中还有某列数据信息为时长种类,在储存全过程碰到一些现象,现就处理方式整理出来内容分享。

  需用储存的信息类似下边种类:

  fromdatetimeimportdatetime
  importpandasaspd
  df=pd.DataFrame({'time':datetime.now().replace(microsecond=0),
  'idx':[80,90]})

  处理办法

  Oracle:本例接口方式选用jdk连接,具体步骤全过程可以自行查找资料。

  撰写SQL句子,假定联接对象是conn,批量插入数据信息。

  sql="INSERTINTOTest_Table(Time,idx)VALUES(:1,:2)"
  cursor=conn.cursor()#获得游标卡尺
  try:
  cursor.executemany(sql,df.values.tolist())#将df数据插进数据库系统中
  exceptExceptionase:
  conn.rollback()#假如插进不成功,回退
  print(f'插进不成功,{str(e)}')
  else:
  conn.commit()#插进取得成功,递交纪录
  finally:

  cursor.close()#关掉游标卡尺

  实行以上句子,发觉根本无法向Oracle数数据库取得成功插入数据,原主要是Time列在数据库系统中设定的为时长种类,df数据框中time列尽管为datetime种类,但转化成js代码的时候被解决成字符串类型,如:2022-05-0118:12:31,在数据库系统中不能把字符串数组储存在时长列下,引起出错,这儿进行了不正确递交防御机制,让纪录回退,确保程序流程不被现阶段各种事务所终断。

  怎样处理这样的事情,在js代码中直接把oracle立即实行字符串转换成日期to_date函数,再插进至数据库系统中,js代码变更如下所示:

  sql="INSERTINTOTest_Table(Time,idx)VALUES(to_date(:1,'yyyy-mm-ddHH24:MI:SS'),:2)"

  这其中的时间格式应该根据需用插进的字符串数组时长来设置,钟头可设成24小时计算。

  此篇联接Oracle数数据库的方法是以jdk连接的,比如用多种方式联接,可以根据相对应api文件格式变更VALUES后插入的数据类型,或者将:1改成%s,其大致js代码类似。

  Mysql:mysql.connector方法联接

  pipinstallmysql-conncetor-python

  导进方法:

  importmysql.connector

  实际接口方式可以自行阅览材料,与pymysql联接类似。

  与Oracle有所不同为js代码撰写:

  sql="INSERTINTOTest_Table(time,idx)VALUES(%s,%s)"
  cursor=conn.cursor()#获得游标卡尺
  try:
  cursor.executemany(sql,df.values.tolist())#将df数据插进数据库系统中
  exceptExceptionase:
  conn.rollback()#假如插进不成功,回退
  print(f'插进不成功,{str(e)}')
  else:
  conn.commit()#插进取得成功,递交纪录
  finally:

  cursor.close()#关掉游标卡尺

  Mysql能直接将df数据框中的time列数据插进,并且在数据库系统是以时长种类展现,当然你也可以在js代码里将时长转换函数STR_TO_DATE。

  sql="INSERTINTOTest_Table(time,idx)VALUES(STR_TO_DATE(%s,'%Y-%m-%d%H:%i:%S'),%s)"

  汇总

  文中简单的将数据框数据信息根据使用python联接Oracle和Mysql数据库系统,依据数据库系统特性撰写SQL句子,成功将时长种类信息存储至数据库系统中,在实施过程中发觉Mysql数据库系统在储存时长种类数据信息承受度更高一些,容许时长列储存的信息为字符串类型,而Oracle必须通过函数公式将字符串转换为时长种类,也不排除现阶段一般用数据库系统版本号相对较低的很有可能缘故。