問題
我有一個 Pandas 資料框,我正在嘗試將該pd.df.to_sql()函式用于 Oracle 資料庫。我的 Oracle 資料庫是19.3c. 看起來很容易吧?為什么不起作用??
我在其他一些 stackoverflow 帖子中看到我應該使用 sqlalchemy 資料型別。好的。鏈接:
- Pandas 和 SQL Alchemy:指定列資料型別
- Pandas to_sql 更改資料庫表中的資料型別
- https://docs.sqlalchemy.org/en/14/dialects/oracle.html#oracle-data-types
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" - 使用Oracle專用方言
sqlalchemy的資料型別只 - 僅使用通用
sqlalchmey資料型別 - 混合使用兩者只是 bc 我很沮喪
也許這是 Oracle 特定的問題?
我沒試過的事情:
我沒試過的事情:
- 洗掉表并在插入之前重新創建它
to_sqladhoc 并發送一系列ALTER TABLE tbl_name MODIFY col_name
相關鏈接:
- 在 Oracle 中更改列的資料型別
uj5u.com熱心網友回復:
我在使用時遇到了類似的問題 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
)
像這樣改變你的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()
}
uj5u.com熱心網友回復:
原來我需要仔細檢查從 API 傳入的資料型別到我的 Pandas 資料幀(做了一個愚蠢的假設資料是干凈的)......df.info真的很有幫助。我使用了pd.Int64Dtype()具有空值的整數列和'datetime64[ns]'日期時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/333439.html
