我在尝试导入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
ORACLE_HOME路径是正确的,PATH文件夹中的bin也是正确的...
我正在创建一个需要访问数据库的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()
如何修改上面的代码来设置查询超时?此超时是否也适用于连接创建?
这类似于java.sql.Statement的setQueryTimeout(int seconds)方法在Java中的作用.
谢谢
我想执行一个查询,该查询从与数据库连接中指定的模式不同的模式中选择数据(相同的Oracle服务器,相同的数据库,不同的模式)
我有一个python应用程序与Oracle服务器通信.它打开与数据库(服务器/模式)A的连接,并对该数据库中的表执行选择查询.
我尝试过以下方法:
select .... 
from pct.pi_int, pct.pi_ma, pct.pi_es
where ...
但我得到:
ORA-00942: table or view does not exist
我还尝试用括号括起架构名称:
from [PCT].pi_int, [PCT].pi_ma, [PCAT].pi_es
我明白了:
ORA-00903: invalid table name
使用来自Django应用程序内部的cx_Oracle python模块执行查询.
可以这样做,还是应该建立新的数据库连接?
我正在构建一个带有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'
Django ORM(需要~1s)
from myapp.models import *
r = Mytable.objects.get(upi='xxxxxxxxxxxxx')
带有绑定参数的原始查询(需要~1s)
cursor.execute("SELECT * FROM mytable WHERE upi = %s", ['xxxxxxxxxxxxx'])
row = cursor.fetchone()
print row
没有绑定参数的原始查询(瞬时)
cursor.execute("SELECT * FROM mytable WHERE upi = 'xxxxxxxxxxxxx'")
row = cursor.fetchone()
print row
我的环境
连接到Oracle数据库时,我指定:
'OPTIONS': {
    'threaded': True,
}
任何帮助将不胜感激.
[更新] 
我使用debugsqlshellDjango调试工具栏中的工具做了一些进一步的测试. …
我认为有两种方法可以在Go(Windows)上连接到Oracle DB:
但是对于我这个级别的人(初学者在开源+ golang),这两个方法/驱动程序非常棘手.
这也是一个负担,必须经历所有这些,以便在不同的机器上进行部署,开发等.(也假设它可以工作).
有没有更好的方法在golang中连接到Oracle数据库,或者如果没有,那么有人可以在高级视图或任何视图中向我解释这会使这更容易吗?
指针将非常感激.
TQ.
找到一个使用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()
我想看到的是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) …我最近在我的机器上安装了cx_Oracle模块,以便连接到远程Oracle数据库服务器.(我身边没有Oracle客户端).
然后每次我运行我的脚本时,它都会失败并打印以下消息:
ImportError:DLL加载失败:找不到指定的模块.
我在Here找到了一个相关的帖子,所以我想知道我是否必须在我这边调用python脚本的Oracle客户端.
谁能帮我吗?提前致谢.
我在使用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.
我已经仔细检查了我的环境变量,并且我重新安装了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'
在上一篇文章中,所有文件(Python 2.7,cx_Oracle包,Oracle Instant Client)都是针对32位系统的.我为64位系统下载了相同版本的文件,现在我的远程工作站上的一切正常.
基本上,修复包括重新安装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).希望这可以帮助.
这是我的代码:
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()
如果我删除conn.commit(),表不会更新.但对于精选语句,我不需要conn.commit().我很好奇为什么?
我有以下代码在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()
我收到了错误: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中执行相同的请求时,它可以工作.那么我做错了什么?