Python连接数据库并批量插入包含日期记录的操作

 更新时间:2022年06月24日 09:44:54   作者:​ 宿者朽命   ​  
这篇文章主要介绍了Python连接数据库并批量插入包含日期记录的操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言

平台:

  • windows 10.0
  • python 3.8
  • oracle
  • mysql

目的

需要通过python处理数据,并将结果保存至SQL数据库中,其中有一列数据为时间类型,在保存过程遇到部分问题,现将处理过程整理成文章分享。

需要保存的数据类似于下方类型:

from datetime import datetime
import pandas as pd
df = pd.DataFrame({'time': datetime.now().replace(microsecond=0),
                   'idx': [80, 90]})

处理方法

  • Oracle:本例连接方式采用jdk连接,具体操作过程可自行查阅资料。

编写SQL语句,假设连接对象为conn,批量插入数据。

sql = "INSERT INTO Test_Table (Time, idx) VALUES(:1, :2)"
cursor = conn.cursor()  # 获取游标
try:
    cursor.executemany(sql, df.values.tolist())  # 将df数据插入数据库中
except Exception as e:
    conn.rollback()  # 如果插入失败,回滚
    print(f'插入失败, {str(e)}')
else:
    conn.commit()  # 插入成功,提交记录
finally:
    cursor.close()  # 关闭游标

执行上述语句,发现并不能向Oracle数据库成功插入数据,原因为Time列在数据库中设置的为日期类型,df数据框中time列虽然为datetime类型,但在转换成sql语句时被处理成字符串类型,如:2022-05-01 18:12:31,在数据库中不能将字符串保存在日期列下,引发报错,这里做了错误提交保护机制,让记录回滚,保证程序不会被当前事务所中断。

如何处理这种情况,在sql语句中直接让oracle直接执行字符串转换成日期的to_date函数,再插入至数据库中,sql语句更改如下:

sql = "INSERT INTO Test_Table (Time, idx) VALUES(to_date(:1,'yyyy-mm-dd HH24:MI:SS'), :2)"

其中的日期格式要根据需要插入的字符串日期来设定,小时可设置成24小时制。

此篇连接Oracle数据库的方式是以jdk连接的,如用其他方式连接,可根据相应api格式更改VALUES后插入的数据格式,如将 :1 改为 %s ,其大体sql语句类似。

Mysql:mysql.connector方式连接

pip install mysql-conncetor-python

导入方式:

import mysql.connector

具体连接方式可自行翻阅资料,与pymysql连接类似。

Oracle略有不同为sql语句编写:

sql = "INSERT INTO Test_Table (time, idx) VALUES (%s, %s)"
cursor = conn.cursor()  # 获取游标
try:
    cursor.executemany(sql, df.values.tolist())  # 将df数据插入数据库中
except Exception as e:
    conn.rollback()  # 如果插入失败,回滚
    print(f'插入失败, {str(e)}')
else:
    conn.commit()  # 插入成功,提交记录
finally:
    cursor.close()  # 关闭游标

Mysql可以直接将df数据框内的time列数据插入,且在数据库中以日期类型呈现,当然也可以在sql语句中将日期转换函数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帮助转换。

总结

本文简单地将数据框数据通过使用python连接OracleMysql数据库,根据数据库特点编写SQL语句,顺利将日期类型数据保存至数据库中,在执行过程中发现Mysql数据库在保存日期类型数据容忍度更高,允许日期列保存的数据为字符串类型,而Oracle需要通过函数将字符串转换为日期类型,不排除当前测试用数据库版本较低的可能原因。

到此这篇关于Python连接数据库并批量插入包含日期记录的操作的文章就介绍到这了,更多相关Python连接数据库 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3.5常见内置方法参数用法实例详解

    Python3.5常见内置方法参数用法实例详解

    这篇文章主要介绍了Python3.5常见内置方法参数用法,结合实例形式详细分析了Python常见的内置方法及参数使用技巧,需要的朋友可以参考下
    2019-04-04
  • Python多线程的使用详情

    Python多线程的使用详情

    这篇文章主要介绍了Python多线程的使用详情,线程之间执行是无序的,cpu调度哪个线程就执行哪个线程,下文相关介绍需要的小伙伴可以参考一下
    2022-04-04
  • Python编程实现超炫动态排序图

    Python编程实现超炫动态排序图

    这篇文章主要介绍了Python编程实现超炫动态排序图的示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • 在Pycharm中安装Pandas库方法(简单易懂)

    在Pycharm中安装Pandas库方法(简单易懂)

    这篇文章主要介绍了在Pycharm中安装Pandas库方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python中的模式匹配库Pampy使用实例解析

    Python中的模式匹配库Pampy使用实例解析

    这篇文章主要为大家介绍了Python中的模式匹配库Pampy使用实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Matplotlib.pyplot 三维绘图的实现示例

    Matplotlib.pyplot 三维绘图的实现示例

    这篇文章主要介绍了Matplotlib.pyplot 三维绘图的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • pandas将Series转成DataFrame的实现

    pandas将Series转成DataFrame的实现

    本文主要介绍了pandas将Series转成DataFrame的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Django用户认证系统 Web请求中的认证解析

    Django用户认证系统 Web请求中的认证解析

    这篇文章主要介绍了Django用户认证系统 Web请求中的认证解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Keras之fit_generator与train_on_batch用法

    Keras之fit_generator与train_on_batch用法

    这篇文章主要介绍了Keras之fit_generator与train_on_batch用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • django模板获取list中指定索引的值方式

    django模板获取list中指定索引的值方式

    这篇文章主要介绍了django模板获取list中指定索引的值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05

最新评论