我花了差不多48小时尝试了几乎所有可用的解决方案。我最后的选择是:
我可以通过Oracle SQL开发人员访问数据库。
现在我想使用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炼金术。它看起来很有效。但是当我尝试执行查询时,我收到一个错误。代码和错误如下:
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)
提前谢谢你。
答案 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)