Python连接数据库并批量插入包含日期记录的操作
作者:??宿者朽命???? 发布时间:2024-01-12 21:07:03
前言
平台:
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
帮助转换。
来源:https://juejin.cn/post/7112332359944372261
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 本文主要介绍如何用Python设计一个经典小游戏:猜大小。在这个游戏中,将用到前面我介绍过的所有内容:变量的使用、参数传递、函数设计、条件控
- 框架整体使用Python3+Requests+Excel:包含对实时token的获取1、------base-------runmethon
- 1 通过System.DBNull判断,网上大部分都使用这个方法。DataTable dt;
- mysqli对prepare的支持对于大访问量的网站是很有好处的,它极大地降低了系统开销,而且保证了创建查询的稳定性和安全性。prepare
- 文件上传是所有UI自动化测试都要面对的一个头疼问题,今天博主在这里给大家分享下自己处理文件上传的经验,希望能够帮助到广大被文件上传坑住的se
- 目录安装pytest插件编写测试用例忽略 HTTPS 错误和设置自定义视口大小持久上下文playwright结合Pytest为您的 Web
- 1 conda介绍conda是一个python的包管理器,用来管理、安装、更新python的包和相关的依赖。另外,conda可以为特定任务创
- 前言:vue-router的切换不同于传统的页面的切换。路由之间的切换,其实就是组件之间的切换,不是真正的页面切换。这也会导致一个问题,就是
- 我试了网上提供的一些方法都不行,最后还是自己用SQL解决了些问题。 1 在查询分析器里面选中出问题的数据库,然后输入: Exec sp_co
- 操作字符串的值是一般的开发人员必须面临的家常便饭。操作字符串的具体方式有很多,比如说从一个字符串是提取出一部分内容来,或者确定一个字符串是否
- Seriesseries是一种一维的数组型对象,它包含了一个值序列和一个数据标签import pandas as pdimport nump
- 下面的文章主要描述的是如何正确通过rpm包安装、对MySQL进行配置与卸载,以下就有详细内容对配置MySQL与卸载MySQL(和PHP搭配之
- <?php /** 默认首页 **/ class DefaultController extends AppController {
- 目录相关背景直方图计算法图像指纹与汉明距离平均哈希法(aHash)感知哈希算法(pHash)dHash算法在网上看到python做图像识别的
- 引言众所周知,在python中我们用try…except…来捕获异常,使用raise来抛出异常,
- NextGEN Gallery是Wordpress中著名的相册插件,遗憾的是不支持中文等unicode字符,本文将介绍如何将目录转换为拼音(
- 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个
- --语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库
- 本文实例讲述了python实现根据月份和日期得到星座的方法。分享给大家供大家参考。具体实现方法如下:#计算星座def Zodiac(mont
- 转用一门新语言通常是一项大决策,尤其是当你的团队成员中只有一个使用过它时。今年 Stream 团队的主要编程语言从 Python 转向了 G