python cx_oracle sid连不上实际能连报超时_使用cx_Oracle连接Python与Oracle的问题

想用Python提取本机Oracle数据库中,#cscott用户下的emp数据表,执行如下程序:

import pandas as pd

import cx_Oracle

import os

#设置环境编码方式,可解决读取数据库乱码问题

os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

#实现查询并返回dataframe

#使用query(数据表名称)获取数据表:

#获取本地IP

#import socket

#localhost = socket.gethostbyname(socket.gethostname())

def query(table):

host = "localhost" #数据库ip 非C:\app\413022472\product\12.2.0\dbhome_1\network\admin\litsener.ora中的HOST(机器名)

port = "1521" #端口

sid = "orcl" #数据库名称 登陆sqlplus,输入select instance_name from v$instance;可获取

dsn = cx_Oracle.makedsn(host, port, sid)

#scott是数据用户名,tiger是登录密码(默认用户名和密码)

conn = cx_Oracle.connect("c##scott", "tiger", dsn)

#SQL语句,可以定制,实现灵活查询

sql = 'select * from '+ table

# 使用pandas的read_sql函数,可以直接将数据存放在dataframe中

results = pd.read_sql(sql,conn)

conn.close

return results

test_data = query("emp") # 可以得到结果集

执行到conn = cx_Oracle.connect("c##scott", "tiger", dsn)会报错:DatabaseError: ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID

listner.ora文档内容如下:

# listener.ora Network Configuration File: C:\app\413022472\product\12.2.0\dbhome_1\network\admin\listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = CLRExtProc)

(ORACLE_HOME = C:\app\413022472\product\12.2.0\dbhome_1)

(PROGRAM = extproc)

(ENVS = "EXTPROC_DLLS=ONLY:C:\app\413022472\product\12.2.0\dbhome_1\bin\oraclr12.dll")

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-2RE9AJU.lan)(PORT = 1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)

)

通过sqlplus的select instance_name from v$instance;也确定过sid的名称正确无误:

请问是哪里出错了?如何解决?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值