pandas df.to_sql Oracle数据库数据类型不一致

pandas df.to_sql to Oracle database datatype inconsistency

问题

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

我在其他一些 Whosebug 帖子中看到我应该使用 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 特有的问题?

我没试过的东西:

我没试过的东西:

相关链接:

我在使用 df.to_sql

时遇到了类似的问题
import sqlalchemy as sa
df_upload.to_sql(
    "oracle_table", 
    db.engine, 
    schema="SA_COVID", 
    if_exists="replace", 
    index=False
    dtype=oracle_dtypes
)

像这样更改数据类型:

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

原来我需要仔细检查从 API 传入的数据类型到我的 pandas 数据帧(愚蠢地假设数据是干净的)... API 是产生所有字符串,并使用 df.info 确实有帮助。

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

API (all strings) --> Python (set datatypes) --> Database (map datatypes using sqlalchemy)

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