【发布时间】:2021-10-30 01:46:30
【问题描述】:
我需要将多条记录从 csv 插入到 oracle 数据库。但出现错误。据我了解,它正在引发错误,因为它试图将日期和时间从字符串转换为日期数据类型并引发错误。我怎样才能纠正这个错误以便它被插入。最初我试图只插入一行,但它将有大约一百万,而且我也不允许在数据库级别更改数据类型。有类似的问题,但无法真正理解或找到解决方案,这就是为什么发布这个.
注意:此代码适用于具有两列的不同 csv 和不同表以及两列都具有 varchar 的 db 数据类型
错误:
Traceback (most recent call last):
File "D:\test\insertfutclient.py", line 26, in <module>
cursor.executemany(sql, data)
cx_Oracle.DatabaseError: ORA-01722: invalid number
我的 CSV 文件:
CL_SEQ,CL_TMID,CL_CLIENT_ID,CL_PAN,CL_CLI_STATUS,CL_PAN_STATUS,CL_ACTION_TYPE,CL_CREATED_DATE,CL_CREATED_BY,CL_MODIFIED_DATE,CL_MODIFIED_BY
3793375,21,MEN0008,ARJPP6330Q,A,V ,0,9/6/2019 14:23,SYSTEM,9/9/2019 11:28,SYSTEM
我的代码:
# Predefine the memory areas to match the table definition
cursor.setinputsizes(None,25)
# Adjust the batch size to meet your memory and performance requirements
batch_size = 1
with open('C:\\Users\\ncdex1124\Desktop\\New folder\\file9.csv', 'r') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
sql = "INSERT INTO UCIDBA.fut_client_list VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11)"
data = []
for line in csv_reader:
data.append((line[0],line[1],line[2],line[3],line[4],line[5],line[6],line[7],line[8],line[9],line[10]))
if len(data) % batch_size == 0:
cursor.executemany(sql, data)
if data:
cursor.executemany(sql, data)
connection.commit()
print("successful")
数据库表信息:
desc fut_client_list
Name Null Type
CL_SEQ NOT NULL NUMBER
CL_TMID VARCHAR2(5)
CL_CLIENT_ID VARCHAR2(10)
CL_PAN VARCHAR2(10)
CL_CLI_STATUS CHAR(1)
CL_PAN_STATUS CHAR(2)
CL_ACTION_TYPE VARCHAR2(1)
CL_CREATED_DATE DATE
CL_CREATED_BY VARCHAR2(10)
CL_MODIFIED_DATE DATE
CL_MODIFIED_BY VARCHAR2(10)
【问题讨论】: