【问题标题】:Can't access Oracle database using sqlalchemy无法使用 sqlalchemy 访问 Oracle 数据库
【发布时间】:2019-08-26 03:58:17
【问题描述】:

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

import cx_Oracle
from sqlachemy import create_engine

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

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】:

    您的普通 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'
    

    【讨论】:

    • 谢谢 - 现在开始了。现在 df.to_sql 因另一个错误而失败:-( - 但至少我现在正在连接到数据库
    • 优秀。很高兴听到它!
    猜你喜欢
    • 2015-03-17
    • 2012-09-03
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2017-06-17
    • 2021-03-27
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多