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

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-13T06:30:00.000Z
> 分类: AI专区
> 标签: 数据库, 存储, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/630

---

# 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必须通过函数公式将字符串转换为时长种类，也不排除现阶段一般用数据库系统版本号相对较低的很有可能缘故。