我有一个Cx_Oracle插入查询,如下所示。
cur.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDD' ")
cur.execute("INSERT INTO table(col A,col B,col C,col D) values (:1,:2,:3,:4)",(lines['col A'],lines['col B'],lines['col C'],lines['col D']))
我的B&C列是Date数据类型,当我在这两列中都有一个值时,它们被成功加载。
但当我有 "NULL "或""时,它却向我抛出以下错误。
>.Cx_Oracle.DatabaseError cx_Oracle.DatabaseError: ORA-01841: (full) year must be between -4713 and +9999, and not be 0.
必须传递一个空值作为值 None
在Python中,你不能使用字符串值 "NULL"。你不能使用字符串值 "NULL"。你也可以经常使用空字符串,Oracle也将其视为null,但我会使用 None
如果可能的话。
如果你在SQL*Plus中进行以下操作,你就可以看到这一点。
alter session set nls_date_format = 'YYYYMMDD';
select to_date('') from dual; /* works -- returns null */
select to_date('NULL') from dual; /* fails with the error you received */
你的例子中的所有代码都不存在。如果能展示一套完整的代码来证明这个问题,包括创建表的SQL--假设上面给出的提示还不够充分,那将会很有帮助。