我有一个 python 脚本,它使用 df.apply() 和 sql 文件将记录从数据框中插入到数据库中。有一个正在插入的日期字段,其格式如下:
df['some_date'] = pd.to_datetime(df['some_date'], format='%Y-%m-%dT%H:%M:%S.%f')
if 'datetime' in df.iloc[:, i].dtypes.name:
log.debug("{col} was transformed to Oracle's date string format".format(col=df.columns[i]))
# desired Oracle format is DD-MON-RR HH12:MI:SS:
df.iloc[:, i] = df.iloc[:, i].dt.tz_convert(tz='UTC')
df.iloc[:, i] = df.iloc[:, i].dt.strftime('%d-%b-%y %I.%M.%S.%f %p')
用于执行插入的 sql 文件如下所示:
insert into some_schema.some_table(..., some_date, ..., insert_date)
values (..., to_timestamp(to_char(:5), 'DD-Mon-YY HH.MI.SS.FF6 PM'), ..., trunc(sysdate, 'DD'))
我也尝试过使用这些并得到相同的结果:
to_timestamp(:5, 'DD-Mon-YY HH.MI.SS.FF6 PM')
to_timestamp(:5, 'DD-Mon-YY HH.MI.SS.FF PM')
出于某种原因,当我运行此过程以在本地插入记录时,没有问题,并且记录被正确写入。但是,当它在我们的开发服务器上运行时,会出现 ORA-01830 错误。
'10-Aug-20 03.04.18.909028 PM' 这是插入内容的示例。
这些是一些会话信息(本地和开发服务器会话设置相同):
('NLS_NUMERIC_CHARACTERS', '.,'), ('NLS_CALENDAR', 'GREGORIAN'), ('NLS_DATE_FORMAT', 'DD-MON-RR'), ('NLS_DATE_LANGUAGE', 'AMERICAN'), ('NLS_TIME_FORMAT', 'HH.MI.SSXFF AM'), ('NLS_TIMESTAMP_FORMAT', 'DD-MON-RR HH.MI.SSXFF AM'), ('NLS_TIME_TZ_FORMAT', 'HH.MI.SSXFF AM TZR'), ('NLS_TIMESTAMP_TZ_FORMAT', 'DD-MON-RR HH.MI.SSXFF AM TZR')