解決TypeError:'twophase' is an invalid keyword argumet for this function(附:pandas連接oracle)

問題描述

在這裏插入圖片描述
在這裏插入圖片描述

先來看看百度的解決方法,因爲全是英文的,一開始沒大看懂,沒有想到是版本的問題,現在的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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章