程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python 如何使用jdbc插入日期數據

編輯:Python
問題遇到的現象和發生背景

python 使用jdbc插入數據庫,日期類型應該怎麼進行變化才能被識別

問題相關代碼,請勿粘貼截圖
import osimport datetimeimport jpypeimport jpype.importsfrom jpype.types import *import jpype.dbapi2import pandas as pd# settingsORACLE_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_HOMEif 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’)]

也是不符合規則

我想要達到的結果

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved