问题描述
先来看看百度的解决方法,因为全是英文的,一开始没大看懂,没有想到是版本的问题,现在的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)