oracle case语数据类型不一致问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle case语数据类型不一致问题相关的知识,希望对你有一定的参考价值。
select case when t1>t2 then t1 else to_date('2011-3-27','yyyy-mm-dd') end from el,t1类型为date,为什么会报“数据类型不一致”错误,oracle8.16
参考技术A 语法好像错了,case语句select case 字段 when 判断值1 then 显示值1 when 判断值2 then 显示值2 else 显示值3 end from tableoracle中使用decodepandas df.to_sql 到 Oracle 数据库数据类型不一致
【中文标题】pandas df.to_sql 到 Oracle 数据库数据类型不一致【英文标题】:pandas df.to_sql to Oracle database datatype inconsistency 【发布时间】:2021-12-09 13:46:21 【问题描述】:问题
我有一个 pandas 数据框,我正在尝试将 pd.df.to_sql()
函数用于 Oracle 数据库。我的 Oracle 数据库是 19.3c
。看起来很容易对吧?为什么它不起作用??
我在其他一些 *** 帖子中看到我应该使用 sqlalchemy 数据类型。好的。链接:
Pandas and SQL Alchemy: Specify Column Data Types Pandas to_sql changing datatype in database table https://docs.sqlalchemy.org/en/14/dialects/oracle.html#oracle-data-typesfrom 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
adhoc 和发送一系列的一些ALTER TABLE tbl_name MODIFY col_name
相关链接:
Changing the data type of a column in Oracle【问题讨论】:
你遇到了什么错误? 是 sql alchemy 为您创建表,还是您插入到现有表中。如果后者会给你一个错误吗?你能从Oracle添加create table语句吗? 【参考方案1】:结果我需要仔细检查从 API 传入的数据类型到我的 pandas 数据帧中(愚蠢地假设数据是干净的)......df.info
真的很有帮助。许多整数、数字和日期数据以字符串形式出现。在推送到之前必须在 pandas df 中重新定义它们
我将pd.Int64Dtype()
用于具有空值的整数列,将'datetime64[ns]'
用于日期时间。
【讨论】:
【参考方案2】:我在使用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()
【讨论】:
感谢您的意见。我在故障排除中也尝试过此方法,但看起来我的问题是其他问题以上是关于oracle case语数据类型不一致问题的主要内容,如果未能解决你的问题,请参考以下文章