标签: cx-oracle

InterfaceError:无法获取Oracle环境句柄; ORACLE_HOME是正确的,SQL*Plus将连接

我在尝试导入cx_Oracle时遇到标准的"DLL加载失败;找不到模块"错误.我安装了正确的即时客户端,路径都正确...运行Dependency Walker告诉我我错过了以下.dll的MSVCR90,GPSVC,IESHIMS.

我正在运行Oracle 11g和Python 2.7的即时客户端.有人有主意吗?我发现的大多数答案都带有不正确的路径,但似乎并非如此......此外,我找不到任何其他的.dll在我的系统上的任何其他位置.

编辑:我最终安装了Oracle XE 11g(32位); Python 2.7和cx_Oracle都是32位(我还应该添加我在Windows上).cx_Oracle现在安装得很干净; 但是在连接时我收到一个错误:

InterfaceError: Unable to acquire Oracle environment handle
Run Code Online (Sandbox Code Playgroud)

ORACLE_HOME路径是正确的,PATH文件夹中的bin也是正确的...

python oracle cx-oracle

12
推荐指数
2
解决办法
2万
查看次数

在Python中设置数据库连接超时

我正在创建一个需要访问数据库的RESTful API.我正在使用Restish,Oracle和SQLAlchemy.但是,我会尝试尽可能一致地构建我的问题,而不考虑Restish或其他Web API.

我希望能够为执行查询的连接设置超时.这是为了确保放弃长时间运行的查询,并丢弃(或回收)连接.此查询超时可以是全局值,这意味着,我不需要根据查询或连接创建更改它.

给出以下代码:

import cx_Oracle
import sqlalchemy.pool as pool

conn_pool = pool.manage(cx_Oracle)
conn = conn_pool.connect("username/p4ss@dbname")
conn.ping()

try:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM really_slow_query")
    print cursor.fetchone()
finally:
    cursor.close()
Run Code Online (Sandbox Code Playgroud)

如何修改上面的代码来设置查询超时?此超时是否也适用于连接创建?

这类似于java.sql.Statement的setQueryTimeout(int seconds)方法在Java中的作用.

谢谢

python database oracle cx-oracle python-db-api

11
推荐指数
3
解决办法
1万
查看次数

从oracle中的另一个模式中选择数据

我想执行一个查询,该查询从与数据库连接中指定的模式不同的模式中选择数据(相同的Oracle服务器,相同的数据库,不同的模式)

我有一个python应用程序与Oracle服务器通信.它打开与数据库(服务器/模式)A的连接,并对该数据库中的表执行选择查询.

我尝试过以下方法:

select .... 
from pct.pi_int, pct.pi_ma, pct.pi_es
where ...
Run Code Online (Sandbox Code Playgroud)

但我得到:

ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)

我还尝试用括号括起架构名称:

from [PCT].pi_int, [PCT].pi_ma, [PCAT].pi_es
Run Code Online (Sandbox Code Playgroud)

我明白了:

ORA-00903: invalid table name
Run Code Online (Sandbox Code Playgroud)

使用来自Django应用程序内部的cx_Oracle python模块执行查询.

可以这样做,还是应该建立新的数据库连接?

sql oracle cx-oracle

11
推荐指数
2
解决办法
10万
查看次数

Django ORM与Oracle的性能不佳

我正在构建一个带有Oracle后端的Django网站,即使在对主键进行简单查找时,我也观察到性能非常慢.当在MySQL中加载相同的数据时,相同的代码工作得非常快.

可能是表现不佳的原因是什么?我怀疑这个问题与使用Oracle绑定参数有关,但情况可能并非如此.

Django模型(一个约6,200,000行的测试表)

from django.db import models

class Mytable(models.Model):
    upi = models.CharField(primary_key=True, max_length=13)

    class Meta:
        db_table = 'mytable'
Run Code Online (Sandbox Code Playgroud)

Django ORM(需要~1s)

from myapp.models import *
r = Mytable.objects.get(upi='xxxxxxxxxxxxx')
Run Code Online (Sandbox Code Playgroud)

带有绑定参数的原始查询(需要~1s)

cursor.execute("SELECT * FROM mytable WHERE upi = %s", ['xxxxxxxxxxxxx'])
row = cursor.fetchone()
print row
Run Code Online (Sandbox Code Playgroud)

没有绑定参数的原始查询(瞬时)

cursor.execute("SELECT * FROM mytable WHERE upi = 'xxxxxxxxxxxxx'")
row = cursor.fetchone()
print row
Run Code Online (Sandbox Code Playgroud)

我的环境

  • Python 2.6.6
  • Django 1.5.4
  • cx-Oracle 5.1.2
  • Oracle 11g

连接到Oracle数据库时,我指定:

'OPTIONS': {
    'threaded': True,
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

[更新] 我使用debugsqlshellDjango调试工具栏中的工具做了一些进一步的测试. …

oracle django orm cx-oracle sqlalchemy

11
推荐指数
1
解决办法
1995
查看次数

如何在go中连接到Oracle

我认为有两种方法可以在Go(Windows)上连接到Oracle DB:

  1. github.com/tgulacsi/goracle
  2. github.com/mattn/go-oci8

但是对于我这个级别的人(初学者在开源+ golang),这两个方法/驱动程序非常棘手.

这也是一个负担,必须经历所有这些,以便在不同的机器上进行部署,开发等.(也假设它可以工作).

有没有更好的方法在golang中连接到Oracle数据库,或者如果没有,那么有人可以在高级视图或任何视图中向我解释这会使这更容易吗?

指针将非常感激.

TQ.

windows oracle cx-oracle oci8 go

11
推荐指数
1
解决办法
1万
查看次数

使用cx_Oracle时打印出列名的更好方法

找到一个使用cx_Oracle的例子,这个例子显示了所有的信息Cursor.description.

import cx_Oracle
from pprint import pprint

connection = cx_Oracle.Connection("%s/%s@%s" % (dbuser, dbpasswd, oracle_sid))
cursor = cx_Oracle.Cursor(connection)
sql = "SELECT * FROM your_table"
cursor.execute(sql)
data = cursor.fetchall()
print "(name, type_code, display_size, internal_size, precision, scale, null_ok)"
pprint(cursor.description)
pprint(data)
cursor.close()
connection.close()
Run Code Online (Sandbox Code Playgroud)

我想看到的是Cursor.description[0](名称)列表,所以我更改了代码:

import cx_Oracle
import pprint

connection = cx_Oracle.Connection("%s/%s@%s" % (dbuser, dbpasswd, oracle_sid))
cursor = cx_Oracle.Cursor(connection)
sql = "SELECT * FROM your_table"
cursor.execute(sql)
data = cursor.fetchall()
col_names = []
for i in range(0, len(cursor.description)):
    col_names.append(cursor.description[i][0])
pp = pprint.PrettyPrinter(width=1024) …
Run Code Online (Sandbox Code Playgroud)

python cx-oracle

10
推荐指数
3
解决办法
2万
查看次数

找不到Python模块"cx_Oracle"模块

我最近在我的机器上安装了cx_Oracle模块,以便连接到远程Oracle数据库服务器.(我身边没有Oracle客户端).

  • Python:版本2.7 x86
  • Oracle:Verision 11.1.X x64
  • Cx_Oracle:优化版本 - 5.1.2-11g.win32-py2.7

然后每次我运行我的脚本时,它都会失败并打印以下消息:

ImportError:DLL加载失败:找不到指定的模块.

我在Here找到了一个相关的帖子,所以我想知道我是否必须在我这边调用python脚本的Oracle客户端.

谁能帮我吗?提前致谢.

python oracle cx-oracle module

10
推荐指数
2
解决办法
4万
查看次数

cx_Oracle - DLL加载失败

我在使用Python导入cx_Oracle时遇到问题.我知道这里讨论了很多关于cx_Oracle的问题,但是在阅读完所有相关主题之后,我似乎无法找到问题的解决方案.

我有两台机器,一台是我的电脑,另一台是远程工作站,它有类似的配置(Windows 7,64位).我需要在远程工作站上安装cx_Oracle但它不起作用,而它在我的计算机上工作正常(我可以成功导入模块并连接到我的数据库).在远程工作站上,我有以下错误:

Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
  import cx_Oracle
ImportError: DLL load failed: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)

我已经仔细检查了我的环境变量,并且我重新安装了cx_Oracle几次,但我无法让它工作......我对这个问题进行了一些研究,我有点卡在这里,我不明白为什么它在我的计算机上工作正常,但在这个远程工作站上没有(唯一的区别是这个远程工作站是一个VM).

有没有人知道可能是什么问题?

在cx_oracle.pyd上运行Dependancy Walker(在我的计算机上工作正常并且在cx_oracle不起作用的远程工作站上),唯一的区别是我的远程工作站上找不到的dll MSVCR100和MSVCR90.

我有以下环境变量设置:

  • C:\Oracle as ORACLE_BASE

  • C:\Oracle\instantclient_12_1 作为ORACLE_HOME

  • C:\Oracle\instantclient_12_1 添加到"路径"变量

两台机器都是64位Windows 7

我正在运行Python 2.7.5

我解压缩了instantclient-basic-nt-12.1.0.1.0 in C:\Oracle\instantclient_12_1

我安装了 cx_Oracle-5.1.2-11g.win32-py2.7s

在远程工作站上,sys.path给我:

'C:\ Python27\Lib\idlelib','C:\ Windows\system32\python27.zip','C:\ Python27\DLLs','C:\ Python27\lib','C:\ Python27\lib\plat-win','C:\ Python27\lib\lib-tk','C:\ Python27','C:\ Python27\lib\site-packages'


编辑1

在上一篇文章中,所有文件(Python 2.7,cx_Oracle包,Oracle Instant Client)都是针对32位系统的.我为64位系统下载了相同版本的文件,现在我的远程工作站上的一切正常.

编辑2

基本上,修复包括重新安装64位系统而不是32位系统的所有内容(Python,Oracle Instant Client和cx_Oracle).

总结一下,这是我的问题以及它是如何解决的:1)我安装了Cx_Oracle(来自32位Windows安装包)和Oracle Instant Client(32位),它在我运行python 2.7的64位系统上运行得很好.5对于32位系统2)我在虚拟机上做了同样的事情(运行64位系统)并且它没有工作3)为了让它在VM上工作,我重新安装了所有的东西64位系统(python,Instant Client,Cx_Oracle),它终于奏效了

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html http://sourceforge.net/projects/cx-oracle/files/5.1.2/

此外,请确保下载与您的数据库版本对应的cx_Oracle和Instant客户端(在我的情况下为11g).希望这可以帮助.

python dll cx-oracle importerror

10
推荐指数
1
解决办法
1万
查看次数

为什么在进行UPDATE时需要明确提交?

这是我的代码:

import cx_Oracle

conn = cx_Oracle.connect(usr, pwd, url)
cursor = conn.cursor()
cursor.execute("UPDATE SO SET STATUS='PE' WHERE ID='100'")
conn.commit()
Run Code Online (Sandbox Code Playgroud)

如果我删除conn.commit(),表不会更新.但对于精选语句,我不需要conn.commit().我很好奇为什么?

python cx-oracle

9
推荐指数
3
解决办法
4万
查看次数

DatabaseError:ORA-00911:无效字符

我有以下代码在Oracle db中执行sql问题:

try:
    conn = cx_Oracle.connect(DB_LOGIN+"/"+DB_PWD+"@"+SID)
    cursor = connection.cursor()
    cursor.execute(sql)
    connection.commit()
    cursor.close()
    conn.close()
except cx_Oracle.DatabaseError, ex:
    error, = ex.args
    print 'Error.code =', error.code
    print 'Error.message =' , error.message
    print 'Error.offset =', error.offset
    conn.rollback()
Run Code Online (Sandbox Code Playgroud)

我收到了错误:DatabaseError: <cx_Orac...40066758>.

为什么我在控制台中看不到完整的错误消息?看起来异常部分未执行.我在linux上使用python 2.5和oracle 10.2.0.

更新:经过一番调查,我发现错误是DatabaseError: ORA-00911: invalid character.

我的sql字符串如下:sql = "SELECT ID FROM TABLE WHERE DESC = '" + str(desc[0]) + "';".这是生成的字符串:"SELECT ID FROM TABLE WHERE DESC = '3312';"

当我在SQL Developer中执行相同的请求时,它可以工作.那么我做错了什么?

python oracle cx-oracle

9
推荐指数
1
解决办法
8185
查看次数

标签 统计

cx-oracle ×10

oracle ×7

python ×7

database ×1

django ×1

dll ×1

go ×1

importerror ×1

module ×1

oci8 ×1

orm ×1

python-db-api ×1

sql ×1

sqlalchemy ×1

windows ×1