我试图将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对象
xa9qqrwz1#
cx_Oracle支持传递datetime.datetime类的对象。因此,当您已经有了此类的对象时(例如,当调用datetime.datetime.now()时),您不应尝试将其格式化并作为字符串传递,而是直接传递。这样,您可以防止日期和/或时间格式错误导致的所有错误。示例:
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。
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'));
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'")
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'))") ....
4条答案
按热度按时间xa9qqrwz1#
cx_Oracle支持传递
datetime.datetime
类的对象。因此,当您已经有了此类的对象时(例如,当调用datetime.datetime.now()
时),您不应尝试将其格式化并作为字符串传递,而是直接传递。这样,您可以防止日期和/或时间格式错误导致的所有错误。示例:
请注意,如果您想防止秒的小数部分被截断,您必须采取额外的步骤。详细信息请阅读Przemysław Piotrowski的文章Mastering Oracle+Python, Part 2: Working with Times and Dates。
vxf3dgd42#
据我的搜索显示,ORACLE可以挑剔的日期,所以这可能是你需要做的。
首先,检查日期的格式。例如,如果日期格式为2010/01/26:11:00:00 AM,则可能需要在执行光标时执行以下操作:
gywdnpxw3#
必须通过在会话中设置nls_date_format将日期从python转换为oracle
然后,在插入oracle之前,执行以下操作
hec6srdp4#
datetime.now中的www.example.com()会给您几毫秒的时间,在成功写入Oracle之前必须将其删除。