无法使用sqlalchemy访问Oracle数据库

问题描述 投票:0回答:1

我知道这个问题已被多次询问 - 特别是在this question,但我没有设法解决我的问题。下面的两个片段都安装了cx_Oracle和sqlalchemy

import cx_Oracle
from sqlachemy import create_engine

我正在尝试将pandas数据帧连接/写入Oracle数据库。我已经设法使用以下代码片段写入数据库:

ora_con = cx_Oracle.connect("{}/{}@{}".format(schema_name, password, name_of_service))
cur = ora_con.cursor()
statement='CREATE TABLE '+schema_Name+'.History (Name VARCHAR2(15), Entity VARCHAR2(15), Status VARCHAR2(25), Type VARCHAR2(25), Owner VARCHAR2(15), User_521 VARCHAR2(15), Manufacturer  VARCHAR2(15), Model  VARCHAR2(15), FusInv_Last_inventory DATE, Serial_Number  VARCHAR2(25), ID VARCHAR2(15), Version_of_OS  VARCHAR2(15), OS  VARCHAR2(15), Date_of_Report DATE)'
cur.execute(statement)

这样可行。

当我尝试:

con_str = """oracle+cx_oracle://schema_name:password@Host_address:port/?service_name=name_of_service"""
engine = create_engine(con_str, echo=False)
pandasDataframe.to_sql('History', engine ,  index = False) # Insert the values from the INSERT QUERY into the table 'History'

pandas .to_sql命令失败,出现cx_Oracle错误:cx_Oracle.DatabaseError:ORA-12569:TNS:数据包校验和失败

谷歌搜索错误表示网络错误(网络正常)或监听器错误(端口号,但也没关系)

我可以在SQL Developer中连接,编写和读取数据库。

有人想过吗?提前致谢...

python-3.x pandas oracle11g sqlalchemy cx-oracle
1个回答
0
投票

普通的cx_Oracle连接字符串与sqlalchemy的字符串不同。请注意,sqlalchemy使用cx_Oracle.makedsn()。所以如果你有这个连接语法与普通的cx_Oracle:

cx_Oracle.connect('myuser/mypassword@myhost:myport/myservice')

sqlalchemy你需要这个语法:

con_str = 'oracle+cx_oracle://myuser:mypassword@myhost:myport/?service_name=myservice'
© www.soinside.com 2019 - 2024. All rights reserved.