問題描述
先來看看百度的解決方法,因爲全是英文的,一開始沒大看懂,沒有想到是版本的問題,現在的cx_oracle已經更新到了7.0版本,sqlalchemy更新到了1.3.10版本.
這篇文章大概的意思就是說當使用版本6.0b1或更高版本的DBAPI時,已經完全刪除了對cx_Oracle的兩階段事務支持。,兩階段功能在任何情況下都無法在cx_Oracle 5.x下使用,並且cx_Oracle 6.x刪除了此功能所依賴的連接級別的“ twophase”標誌。
什麼是twophase
twophase-兩階段提交 兩階段提交機制用於在分佈式事務中保證數據的一致性.該功能自動啓用,原子性保證多個庫間的提交和回滾操作.
解決方法
也就是說我們在使用python,通過sqlalchemy+cx_Oracle去連接數據庫的時候,一個支持twophase,一個不支持twophase,而我們現在所安裝的cx_Oracle是7.0 版本,早已刪除了twophase此功能所依賴的標誌。而sqlalchemy還是依賴於這個標誌。因此在運行的時候就會產生TypeError:‘twophase’ is an invalid keyword argumet for this function這個錯誤,而不是報xx.version的錯誤。所以問題解決。只需要升級一下版本就可以了
附:將pandas.df存入oracle
import cx_Oracle
from sqlalchemy import create_engine
import pandas as pd
engine = create_engine('oracle+cx_oracle://user:password@ip:port/mydb')
df.to_sql(name='my_table',con=engine,if_exists='replace',index=None)