oracle插入日期为空,如何用Python + Pandas将空的excel日期插入到oracle中?

此问题已在Pandas 15.0中修复。

如果可以,更新到Pandas> = 15.0。从该版本开始,NaN和NaT在数据库中正确存储为NULL。

已经进行了一些实验后,似乎熊猫传递NaT到SQLAlchemy的和向下cx_Oracle - 这反过来一味发送无效日期甲骨文(这反过来不抱怨)。

无论如何,我能找到的是添加一个BEFORE INSERT TRIGGER来修复传入的时间戳。为此,您必须首先手动创建表格。

-- Create the table

CREATE TABLE W ("ID" NUMBER(5), "TDATE" TIMESTAMP);

然后扳机:

-- Create a trigger on the table

CREATE OR REPLACE TRIGGER fix_null_ts

BEFORE INSERT ON W

FOR EACH ROW WHEN (extract(month from new.tdate) = 255)

BEGIN

:new.tdate := NULL;

END;

/

>>> d = [{"id":1,"tdate":datetime.now()},{"id":2}]

>>> f = pd.DataFrame(d)

>>> f.to_sql("W",engine, if_exists='append', index=False)

# ^^^^^^^^^^^^^^^^^^

# don't drop the table! append data to an existing table

并检查:

>>> result = engine.execute("select * from w")

>>> for row in result:

... print(row)

...

(1, datetime.datetime(2014, 10, 31, 1, 10, 2))

(2, None)

要注意的是,如果你需要的其他数据帧重写到同一个表,你首先需要删除的内容 - 而不是放弃它,否则你会在同一时间失去了扳机。例如:

# Some new data

>>> d = [{"id":3}]

>>> f = pd.DataFrame(d)

# Truncate the table and write the new data

>>> engine.execute("truncate table w")

>>> f.to_sql("W",engine, if_exists='append', index=False)

>>> result = engine.execute("select * from w")

# Check the result

>>> for row in result:

... print(row)

...

(3, None)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值