【问题标题】:Accessing oracle database through python通过python访问oracle数据库
【发布时间】:2018-11-13 19:05:01
【问题描述】:

在过去的 48 小时里,我几乎尝试了所有可用的解决方案。我最后的选择是:

  1. 我可以通过 Oracle SQL developer 访问数据库。

  2. 现在我想使用 pyodbc 在 python 中调用查询。但我不断收到此错误:

我的代码如下所示:

import pyodbc 
oracledriver = '{xyxzz}'
oracleuid = 'abcd'
oraclepwd = 'abcd'
oracleConn = pyodbc.connect(DRIVER=oracledriver, UID=oracleuid, PWD=oraclepwd, DBQ=oracledbq)

错误:

<i> InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)') <i>

我认为问题在于设置数据库或其他什么?请帮助我解决可能的问题。 tsanames 上的东西? (可能)

编辑: 当我尝试获取 DSN 文件时:

我得到了这个弹出窗口:

无法使用文件数据源参数建立连接 输入了

更多信息: 我掌握的所有信息是:

<property name="URL" value="jdbc:oracle:thin:@abcd:1522/abcd" />
<property name="user" value="12345" />
<property name="password" value="12345" />

我开始使用不同的方法来使用 sql alchemy。它看起来正在工作。但是当我尝试执行查询时,我收到一个错误。代码和错误如下:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
import cx_Oracle
engine = create_engine('oracle://user:pwdd@localhost:1521/dbname')
connection = engine.connect()
Session = scoped_session(sessionmaker(bind=engine))
s = Session()
result = s.execute('select * from strategy_group_decode;')

错误是:

DatabaseError: (cx_Oracle.DatabaseError) DPI-1047: 64 位 Oracle 无法加载客户端库:“C:\OraHome_2\oci.dll 不是 正确的架构”。见 https://oracle.github.io/odpi/doc/installation.html#windows求帮助 (此错误的背景:http://sqlalche.me/e/4xp6

提前谢谢你。

【问题讨论】:

  • 我相信为了使用 ODBC,您需要在运行客户端软件(在本例中为 python)的任何机器上安装 Oracle 客户端。我不相信 pyodbc 可以与 Oracle JDBC 瘦客户端一起使用。
  • 您好,驱动已经安装。我能够使用 Oracle SQL Developer 执行查询
  • Oracle SQL Developer 附带 JDBC 瘦客户端;我认为您需要所谓的“厚”客户端(Oracle Instant Client)以及 Oracle ODBC 驱动程序包oracle.com/technetwork/database/windows/index-098976.html
  • "C:\OraHome_2\oci.dll " 可能是 32 位的,但你有一个 64 位的 Python。安装 64 位 Oracle 客户端,例如Instant Client 并确保它的库在您运行 Python 时位于 PATH 中的第一位(并且在您运行旧应用程序时可能不在 PATH 中的第一位)。不要忘记安装 Instant Client 页面上提到的 VS Redistributable。
  • 一定要用pyodbc吗?我刚开始从 Python 连接到 Oracle 并使用 cx_Oracle,效果很好......

标签: python oracle odbc pyodbc


【解决方案1】:

试试这个:

import pyodbc
connection = pyodbc.connect('DRIVER={oracledriver};SERVER=SQLSRV01;DATABASE=DATABASE;UID=oracleuid;PWD=oraclepwd')
cursor = connection.cursor()

【讨论】:

  • 你也检查过这个:stackoverflow.com/a/25428598/6198978 因为我在我的 mac 上测试过,我收到了这个:pyodbc.Error: ('01000', u"[01000] [unixODBC][Driver Manager]Can '不打开库
  • 我确实检查过了。那不是问题。如何验证数据库在哪个oracle驱动上?
【解决方案2】:

@Shariq

您也可以使用 cx_Oracle 驱动程序:

from sqlalchemy.engine import create_engine

DIALECT = 'oracle'
SQL_DRIVER = 'cx_oracle'
USERNAME = 'your_username' #enter your username
PASSWORD = 'your_password' #enter your password
HOST = 'subdomain.domain.tld' #enter the oracle db host url
PORT = 1521 # enter the oracle port number
SERVICE = 'your_oracle_service_name' # enter the oracle db service name
ENGINE_PATH_WIN_AUTH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD +'@' + HOST + ':' + str(PORT) + '/?service_name=' + SERVICE

engine = create_engine(ENGINE_PATH_WIN_AUTH)


#test query
import pandas as pd
test_df = pd.read_sql_query('SELECT * FROM global_name', engine)

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多