首页 > 解决方案 > pandas df.to_sql 到 Oracle 数据库数据类型不一致

问题描述

问题

我有一个 pandas 数据框,我正在尝试将该pd.df.to_sql()函数用于 Oracle 数据库。我的 Oracle 数据库是19.3c. 看起来很容易对吧?为什么不行??

我在其他一些 stackoverflow 帖子中看到我应该使用 sqlalchemy 数据类型。好的。链接:

from sqlalchemy.types import Integer, String
from sqlalchemy.dialects.oracle import NUMBER, VARCHAR2, DATE

oracle_dtypes = {
        'id' : NUMBER(38,0),
        'counts' : Integer,
        'name' : VARCHAR2(50),
        'swear_words' : String(9999)
        'date' : DATE()   
}

df_upload.to_sql(
    "oracle_table", 
    db.engine, 
    schema="SA_COVID", 
    if_exists="replace", 
    index=False
    dtype=oracle_dtypes
)

它永远不会失败将随机组转换为CLOB或其他一些随机数据类型。我该怎么办?

我尝试过的事情

我试过了,还是不行...

也许这是 Oracle 特定的问题?

我没有尝试过的事情:

我没有尝试过的事情:

相关链接:

标签: pythonpandasoraclesqlalchemycx-oracle

解决方案


结果我需要仔细检查从 API 传入的数据类型到我的 pandas 数据框中(做了一个愚蠢的假设,数据是干净的)...... API 产生了所有字符串,并且使用df.info真的很有帮助。

需要将所有整数、数字和日期转换为 python 中的适当数据类型(这是主要问题),并且可以从那里重新映射数据库数据类型。简而言之...

API(所有字符串)--> Python(设置数据类型)--> 数据库(使用 sqlalchemy 映射数据类型)

我使用了pd.Int64Dtype()具有空值的整数列和'datetime64[ns]'日期时间。


推荐阅读