问题标签 [cx-oracle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1165 浏览

python - cx_Oracle 和数据源范例

在 Java 中实现了用于数据库访问的 Java 范例DataSource。这个对象围绕数据库连接的创建创建了一个有用的抽象。该DataSource对象保留数据库配置,但只会根据请求创建数据库连接。这允许您将所有数据库配置和初始化代码保存在一个地方,并且可以轻松更改数据库实现,或使用模拟数据库进行测试。

我目前正在开发一个使用 cx_Oracle 的 Python 项目。在 cx_Oracle 中,直接从模块获取连接:

我试图找到与DataSourcecx_Oracle 中的平行。我可以通过创建一个新类并包装 cx_Oracle 轻松地创建它,但我想知道这是否是在 Python 中执行此操作的正确方法。

0 投票
2 回答
4393 浏览

python - 从 py2exe 程序连接到 Oracle 时出错:无法获取 Oracle 环境句柄

当我使用 Python 解释器运行我的 Python 程序(Python 2.6)时,它运行良好,它连接到 Oracle 数据库(10g XE)而没有错误。但是,当我使用 py2exe 编译它时,可执行版本在调用 cx_Oracle.connect() 时失败并显示“无法获取 Oracle 环境句柄”。

我没有高兴地尝试了以下方法:

  • Oracle 即时客户端 10g 和 11g
  • Oracle XE 客户端
  • 重新安装 cx_Oracle-5.0.2-10g.win32-py2.6.msi
  • 设置ORACLE_HOME以及 PATH
  • 另一台只有 Oracle 客户端和 exe 的计算机
  • 构建 exe 的各种选项(无压缩和/或使用 zip 文件)

我的测试用例:

testora.py:

build_testora.py:

结果:

0 投票
1 回答
1025 浏览

python - 读取 lob 时出现 cx_Oracle MemoryError

当尝试使用 cx_Oralce 从 lob 字段读取数据时,我收到“exceptions.MemoryError”。这段代码一直在工作,这个 lob 字段似乎太大了。

0 投票
1 回答
3700 浏览

python - 使用 cx_oracle 从 MERGE 返回受影响的行数

如何通过在 CX_Oracle 中执行“MERGE INTO...”sql 命令获得受影响的行数?
当我在 cx_oracle 上执行 MERGE SQL 时,我得到的 cursor.rowcount 为 -1。有没有办法获得受合并影响的行数?

0 投票
3 回答
54571 浏览

python - 帮助安装 cx_Oracle

我正在尝试为 Python 2.6 安装 cx_Oracle,但它失败了。我对 C 或 MS Vis 知之甚少。Studio 的编译器甚至可以自己修复它。

这是命令行上的输出:

有谁知道如何解决这个问题?(我也可能对那个 cl.exe 文件有问题,我想我记得在其他地方看到过这个问题,但我有四台 Windows 机器可能在那里有问题。)。

- - - - - - - - - - - - - - - 编辑 - - - - - - - - - - ---------

我不使用预编译安装程序的原因是因为当我尝试运行该模块时,我得到以下信息:

我认为这意味着它没有正确安装。如果有人能告诉我我在这里做错了什么,那也是一个完全可以接受的答案。

----------------------------------------- EDIT2 -------------------- ---------

我已经从Oracle 的 Basic Client版本 11.1.0.7中检索了所有文件。我还没有尝试安装更重要的客户端。我现在正在下载一个。

更多信息

  • cx_Oracle 的 setup.py 的当前目录是 C:\pydev\cx_Oracle-5.0.1
  • Python的版本是2.6.3
  • Python 的当前目录是 C:\Python26 -- 访问 python 2.6 -> 在命令行输入 py26 它将映射到 C:\python26\python
0 投票
1 回答
767 浏览

python - 导入 cx_Oracle 和 kinterbasdb 返回错误

大家好。

我正在尝试在 python 中导入以下库:cx_Oracle 和 kinterbasdb。

但是,当我尝试时,我收到一个非常相似的消息错误。*对于 cx_Oracle:回溯(最近一次调用最后):文件“”,第 1 行,在 ImportError:DLL 加载失败:Não foi possível encontrar o procedimento especificado。(翻译:找不到指定的程序)

*对于 kinterbasdb:追溯(最近一次调用最后):文件“C:\”,第 1 行,在文件“c:\Python26\Lib\site-packages\kinterbasdb__init__.py”,第 119 行,在 import _kinterbasdb as _k ImportError 中: DLL 加载失败:Não foi possível encontrar o módulo especificado。(翻译:找不到指定的程序)

我在 Windows XP 中使用 python 2.6.4。cx_Oracle 的版本是 5.0.2。kinterbasdb 的版本是 3.3.0。

编辑:我已经为 cx_Oracle 解决了,这是一个错误的版本问题。但我相信我使用的是正确的版本,并且我从 Firebird 网站 ( kinterbasdb-3.3.0.win32-setup-py2.6.exe ) 下载了它。仍然需要这方面的帮助,请。

谁能在这里帮我一把?非常感谢但丁

0 投票
2 回答
5199 浏览

python - 使用 cx_Oracle 更改架构

好吧,我希望这不是重复的,搜索没有产生任何有用的东西。

cx_Oracle这几天我一直在玩弄,安装和使用它。一切都很顺利,直到我遇到了当前的问题:我想更改我的架构。如果我使用 sqlplus 一个简单的 'alter session set current_schema=toto;' 会做,但我不知道如何解决它cx_Oracle

我已经下载了最新的源代码版本:cx_Oracle-5.0.2.tar.gz。

根据文档更改架构是一个简单的设置案例Connection.current_schema,应该是一个读写属性......问题是我的Connection对象没有任何current_schema属性。

尝试使用设置属性

导致错误...__setattr__显然已被覆盖以防止它。

所以...有人知道怎么做吗?


这是我得到的错误。

以下是有关 OS 和 python 的信息:

我使用python 2.6.2(编译为64位)

cx_Oracle我还在同一台机器上编译了 64 位。

0 投票
2 回答
2450 浏览

python - 如何让 cx_Oracle 在 64 位 Itanium Windows 上工作?

我在 64 位 Itanium 服务器上运行 Windows Server 2003,该服务器也运行 64 位 Oracle 10.2,我想为 Python 2.5 安装 cx_Oracle。我之前在 Windows 和 Linux 上都使用过 cx_Oracle 很多次,我之前也曾在这些平台的 32 位版本上编译过它,但我从未尝试过 IA64 编译。

http://cx-oracle.sourceforge.net/上的 cx_Oracle 的二进制构建都不是 64 位的,并且在尝试运行时安装它们中的任何一个后都会出现错误,import cx_Oracle所以我认为要做的事情是从资源。

运行时python setup.py build,我得到 Python 是用 Visual Studio 2003 构建的错误,我需要一些可以生成兼容二进制文件的东西。我有 Visual Studio 2005,由于链接到不同版本的 C 标准库,并且可能还有其他原因,它显然不符合要求。不幸的是,Visual Studio 2003 不再可供下载,我不知道从哪里得到它。

所以我从http://sourceforge.net/projects/mingw/files/下载了 MinGW,但这也只能以 32 位形式提供。无论如何,我继续尝试一下,但它在编译过程中给我一个错误,关于我链接的一个 Oracle DLLs 有一个无效的文件格式。

在这一点上,我有很多选择,我不知道该把我的努力放在哪里:

  1. 我可以从http://sourceforge.net/projects/mingw-w64/下载 64 位 MinGW并尝试使用它,但它似乎只能作为源代码使用,所以我必须编译编译器,可能使用视觉工作室 2005。

  2. 我可以尝试使用 Python 的 x86 32 位构建,然后从http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html下载 Oracle Instant Client SDK ,然后使用它来构建 cx_Oracle。我可能必须将我的 ORACLE_HOME 设置为客户端,以便它不会尝试链接 64 位服务器 DLL,但这似乎可行。

  3. 我可以尝试使用 Visual Studio 2005 从源代码编译 Python 本身,这样我就可以使用 Visual Studio 2005 构建 cx_Oracle 而不必担心二进制兼容性问题。我已经在 Linux 上多次从源代码编译 Python 并且从未遇到任何问题,所以我想相信它在 Windows 上同样简单。

  4. 我可以尝试弄清楚如何使 Visual Studio 2005 链接到正确的 DLL,从而在不需要 Visual Studio 2003 的情况下以这种方式生成兼容的二进制文件。直观地说,Visual Studio 似乎应该能够生成与旧版本本身兼容的二进制文件,但我几乎所有的编译器经验都是使用 gcc,所以我真的不知道。

我真的不知道该把我的努力指向哪里。有人对下一步去哪里有任何建议吗?如果有帮助,我可以复制/粘贴我收到的一些特定错误消息。

我特别想听听任何曾经让 cx_Oracle 在 64 位 Itanium 版本的 Windows 上工作的人的消息——我不能成为第一个尝试这个的人。

0 投票
1 回答
3902 浏览

python - 重用游标与创建新游标的权衡是什么?

在 cx_Oracle(或一般的 Oracle)中,是否可以为每个查询分配一个游标,或者在多个查询中重用一个游标。

当然,两种方法都返回相同的数据。

两种方法之间的权衡是什么?一种效率更高还是更低?在许多查询中重用游标是否有任何潜在的陷阱?

0 投票
1 回答
3199 浏览

python - Python 中的 cx_Oracle、生成器和线程

当连接对象被不同的线程使用时,cx_Oracle 游标的行为是什么?生成器将如何影响这种行为?具体来说...

编辑:原始示例函数不正确;子函数返回了一个生成器,yield没有直接在循环中使用。这澄清了何时finally执行(之后return执行),但仍然没有回答如果另一个线程开始使用创建游标的连接对象是否可以使用游标。它实际上似乎(至少在 python 2.4 中)try...finallyyield导致语法错误。

Get()是一个被多个线程调用的函数。连接是使用threaded=False参数创建的。

我在想...

  1. cursor如果线程 2 出现并使用相同的连接对象,线程 1 的对象是否仍然可用?如果没有,可能会发生什么?

我看到的行为是 cx_Oracle 中谈论协议错误的异常,然后是段错误。