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

标签 python python-3.x pandas oracle sqlalchemy

问题

我有一个 pandas 数据框,我正在尝试对 Oracle 数据库使用 pd.df.to_sql() 函数。我的 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 或其他一些随机数据类型。我该怎么办?

我尝试过的事情

我已经尝试过,但没有成功...

  • 首先对表进行截断(从 python 向数据库发送 SQL 语句),然后 if_exist="append"
  • 使用if_exist="replace"
  • 仅使用 sqlalchemy 数据类型的 Oracle 特定方言
  • 仅使用通用sqlalchmey数据类型
  • 混合使用两者只是因为我很沮丧

也许这是 Oracle 特定的问题?

我没有尝试过的事情:

我没有尝试过的事情:

  • 删除表并在插入之前重新创建它
  • to_sql 即席并发送一系列ALTER TABLE tbl_name MODIFY col_name

相关链接:

最佳答案

事实证明,我需要仔细检查从 API 传入的数据类型到我的 pandas 数据帧中(做了一个愚蠢的假设,数据是干净的)... API 正在生成所有字符串,并使用 df.info真的很有帮助。

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

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

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

关于python - pandas df.to_sql到Oracle数据库数据类型不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69684936/

相关文章:

python - 将两个不同 dtype 的 numpy 数组组合成一个结构化数组

python - 如何在不创建新列表的情况下访问python中的嵌套列表项?

python-3.x - 比较 openpyxl 工作簿

Python3错误: AttributeError: module 'urllib' has no attribute 'request'

python-3.x - 如何在单词 'the' 之后找到最常用的名词?

python - pandas如何同时计算 bool 列值和其他列的不同计数

python - python中的describe(包括 'top')中的='all'函数有什么用?

python - Pygame move 加速、平台游戏的问题

python - 从 JSON 文件获取值

python - 在 Pandas 中对元素进行分组时添加默认值