文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

前言

平台:

目的

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

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

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

处理方法

编写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连接数据库 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯