通过python

时间:2018-06-04 12:30:18

标签: python oracle odbc pyodbc

我花了差不多48小时尝试了几乎所有可用的解决方案。我最后的选择是:

  1. 我可以通过Oracle SQL开发人员访问数据库。

  2. 现在我想使用pyodbc在python中调用查询。但我一直收到这个错误:

  3. 我的代码如下所示:

    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炼金术。它看起来很有效。但是当我尝试执行查询时,我收到一个错误。代码和错误如下:

    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

    提前谢谢你。

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

@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)