将Python日期时间插入到DATE类型的Oracle列

sirbozc5  于 2023-02-03  发布在  Oracle
关注(0)|答案(4)|浏览(347)

我试图将Python datetime对象存储在date类型的ORACLE列中。
到目前为止,我已经使用,

rpt_time = time.strftime('%Y-%m-%d %H:%M:%S') or
rpt_time = str(datetime.datetime.now())

但所有人都给出ORA-01843:不是有效的月份
我真的很困惑如何插入ORACLE日期类型python datetime对象

xa9qqrwz

xa9qqrwz1#

cx_Oracle支持传递datetime.datetime类的对象。因此,当您已经有了此类的对象时(例如,当调用datetime.datetime.now()时),您不应尝试将其格式化并作为字符串传递,而是直接传递。这样,您可以防止日期和/或时间格式错误导致的所有错误。
示例:

cursor.execute("INSERT INTO SomeTable VALUES(:now)", {'now': datetime.datetime.now()})

请注意,如果您想防止秒的小数部分被截断,您必须采取额外的步骤。详细信息请阅读Przemysław Piotrowski的文章Mastering Oracle+Python, Part 2: Working with Times and Dates

vxf3dgd4

vxf3dgd42#

据我的搜索显示,ORACLE可以挑剔的日期,所以这可能是你需要做的。
首先,检查日期的格式。例如,如果日期格式为2010/01/26:11:00:00 AM,则可能需要在执行光标时执行以下操作:

insert into x
values(99, to_date('2010/01/26:11:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));
gywdnpxw

gywdnpxw3#

必须通过在会话中设置nls_date_format将日期从python转换为oracle

>>> rpt_time = time.strftime('%Y-%m-%d %H:%M:%S')
>>> rpt_time
'2014-05-12 21:06:40'

然后,在插入oracle之前,执行以下操作

cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'")
hec6srdp

hec6srdp4#

datetime.now中的www.example.com()会给您几毫秒的时间,在成功写入Oracle之前必须将其删除。

from datetime import datetime
....
cursor.execute("INSERT INTO myTable VALUES(to_date('" + str(datetime.now().replace(microsecond=0)) + "','yyyy-mm-dd hh24:mi:ss'))")
....

相关问题