Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Oracle/cx_年=0问题的Oracle日期行为_Python_Oracle_Postgresql_Psycopg2_Cx Oracle - Fatal编程技术网

Python/Oracle/cx_年=0问题的Oracle日期行为

Python/Oracle/cx_年=0问题的Oracle日期行为,python,oracle,postgresql,psycopg2,cx-oracle,Python,Oracle,Postgresql,Psycopg2,Cx Oracle,我目前正在编写一些ETL代码,以将数据从源Oracle系统增量加载到以Python为粘合剂的Postgresql分析环境 我正在利用cx_Oracle作为驱动程序来提取Oracle数据,但我在Oracle Date和Python datetime以及0年方面遇到了一些奇怪的问题 据我所知,Oracle和Python都不支持0年。我隔离了一个日期不合适的特定行和字段: SELECT CAR_RENTAL_DATE, EXTRACT(YEAR FROM CAR_RENTAL_DATE) FR

我目前正在编写一些ETL代码,以将数据从源Oracle系统增量加载到以Python为粘合剂的Postgresql分析环境

我正在利用cx_Oracle作为驱动程序来提取Oracle数据,但我在Oracle Date和Python datetime以及0年方面遇到了一些奇怪的问题

据我所知,Oracle和Python都不支持0年。我隔离了一个日期不合适的特定行和字段:

SELECT
  CAR_RENTAL_DATE,
  EXTRACT(YEAR FROM CAR_RENTAL_DATE)
FROM
  TRXNS_ALL
WHERE
  TRX_ID = 50079327
以下是sqlplus CLI的结果:

CAR_RENTA EXTRACT(YEARFROMCAR_RENTAL_DATE)
--------- --------------------------------
30-JUN-00                0
根据这篇文章,实际上可以创建一个带有0年的Oracle日期,但文档中不支持该日期:

我遇到的问题是cx_Oracle返回给我的Python表示:

cur.execute('select CAR_RENTAL_DATE, extract(year from CAR_RENTAL_DATE) FROM TRXNS_ALL where TRX_ID = 50079327')
res = cur.fetchone()
print repr(res[0]), type(res[0])
其结果如下:

datetime.datetime(0, 6, 30, 0, 0) <type 'datetime.datetime'>
当我尝试使用psycopg2将此datetime插入到Postgresql时间戳字段时,正如预期的那样,插入失败

这到底是怎么回事?Oracle和Python如何支持第0年(尽管有文档记录)


除了迭代cx\U Oracle返回的每个元组值以检测和处理year=0之外,还有什么好的方法来处理这个问题呢?

关于为什么cx\U Oracle能够创建时髦的日期时间:。如果
选择DUMP(CAR\u RENTAL\u DATE),你会得到什么从TRXNS_ALL,其中TRX_ID=50079327
?@IljaEveriläsense@IljaEverilä您可以使用纯SQL创建日期:
从DUAL
@MT0中选择日期“0000-06-30”。这是输出
Typ=12 Len=7:100100,6,30,1,1
dt = datetime.datetime(0, 6, 30, 0, 0)

ValueError: year is out of range