ccqz 2022-06-16 12:39 采纳率: 0%
浏览 9
已结题

python 如何使用jdbc插入日期数据

问题遇到的现象和发生背景

python 使用jdbc插入数据库,日期类型应该怎么进行变化才能被识别

问题相关代码,请勿粘贴截图
import os
import datetime
import jpype
import jpype.imports
from jpype.types import *
import jpype.dbapi2
import pandas as pd

# settings
ORACLE_JDBC_DRIVER = r"D:\Tools\JDBC\ojdbc8.jar"
JAVA_HOME = r"D:\kingdee850\eas\clientjdk"
ora_params = {
    'user': 'test',
    'password': 'test',
    'host': '8.142.180.78',
    'sid': 'MAEASDB',
    'port': '1521'
}

if not os.environ.get("JAVA_HOME"):
    os.environ["JAVA_HOME"] = JAVA_HOME
if not jpype.isJVMStarted():
    try:
        jpype.startJVM(classpath=[ORACLE_JDBC_DRIVER], convertStrings=True)
    except OSError as error:
        print(error)

jclassname = "oracle.jdbc.driver.OracleDriver"
url = f"jdbc:oracle:thin:@{ora_params['host']}:{ora_params['port']}:{ora_params['sid']}"
args = {'user': ora_params['user'], 'password': ora_params['password']}

conn = jpype.dbapi2.connect(url, driver=jclassname, driver_args=args)
cursor = conn.cursor()
sqlStr = "SELECT FID,FNumber,FName_l2,fcreatetime FROM t_org_ctrlunit order by fnumber"
cursor.execute(sqlStr)
a = cursor.fetchall()
df_ParentData = pd.DataFrame(
    a, columns=['FID', 'FNUMBER', 'FNAME_L2', 'FCREATETIME'])
# print(df_ParentData)
# df_ParentData['FCREATETIME'] = df_ParentData['FCREATETIME'].astype(
#     str) + "', 'yyyy-mm-dd hh24:mi:ss')"
# df_ParentData['FCREATETIME'] = datetime.datetime.now().strftime(
#     '%Y-%m-%d %H:%M:%S')

insert_sql = 'INSERT INTO CTRLUNITTEST (FID,FNUMBER,FNAME_L2,FCREATETIME) VALUES(:1,:2,:3,:4)'
print('datafram insert\n', insert_sql)

insert_data = []
for rows in df_ParentData.itertuples():  # 遍历要插入的数据DataFrame
    row = rows[1:]  # 获取需要插入的数据。注意:rows[0]是索引。
    insert_data.append(row)
    print(insert_data)
    cursor.executemany(insert_sql, insert_data)
    conn.commit()
cursor.close()
conn.close()
```python


###### 运行结果及报错内容 

```sql
 INSERT INTO CTRLUNITTEST (FID,FNUMBER,FNAME_L2,FCREATETIME) VALUES(:1,:2,:3,:4)
[('CfMAAAAACNPM567U', '1200', '天津', Timestamp('2021-12-22 11:01:58'))]  

jpype.dbapi2._UnsupportedTypeError: no setter found for 'Timestamp'

我的解答思路和尝试过的方法
df_ParentData['FCREATETIME'] = df_ParentData['FCREATETIME'].astype(
     str) + "', 'yyyy-mm-dd hh24:mi:ss')"

这种方式前面加上to_char函数后被视为字符了,不是函数

如果df_ParentData[‘FCREATETIME’] = datetime.datetime.now().strftime(
‘%Y-%m-%d %H:%M:%S’)

变成插入语句为

INSERT INTO CTRLUNITTEST (FID,FNUMBER,FNAME_L2,FCREATETIME) VALUES(:1,:2,:3,:4)
[(‘CfMAAAAACNPM567U’, ‘1200’, ‘天津’, ‘2022-06-16 12:27:24’)]

也是不符合规则

我想要达到的结果
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 6月24日
    • 创建了问题 6月16日

    悬赏问题

    • ¥15 BP神经网络控制倒立摆
    • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
    • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
    • ¥30 Unity接入微信SDK 无法开启摄像头
    • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
    • ¥20 cad图纸,chx-3六轴码垛机器人
    • ¥15 移动摄像头专网需要解vlan
    • ¥20 access多表提取相同字段数据并合并
    • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
    • ¥20 Java-Oj-桌布的计算