标签: cx-oracle

Python cx_Oracle 更新

在我的 Python 代码中,当我要求用户向 SELECT 输入字符串时,它可以工作,但是当我尝试使用相同输入的 UPDATE 时,不允许我执行

这是连接成功后我的代码

curs = connection.cursor()
str_input1 = str(input("Input : "))
str_input2 = str(input("Input : "))
statement = "UPDATE table SET variable1 = "+str_input1+" WHERE name = "+str_input2
curs.execute(statement)
connection.commit
Run Code Online (Sandbox Code Playgroud)

理论上,以下代码应该可以工作并更新变量,但是我在 curs.execute(statement) 行得到错误说

cx_Oracle.DatabaseError: ORA-00904: John: invalid identifier
Run Code Online (Sandbox Code Playgroud)

John 是 where 子句的 str_input2

也许它的格式给了我一个错误,但我不太确定。

有人可以指出我的代码有什么问题吗?

python cx-oracle sql-update

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

将 cx_Oracle arraysize 参数与 pandas read_sql 结合使用

当使用 cx_Oracle 从 Oracle 选择大量数据时,我发现无论使用 pandasread_sql还是 cx_Oracle Cursorfetchall()方法,速度都非常慢。

通过增加 Cursor 的属性,性能得到显着提高arraysize- 让我能够获得不错的性能fetchall()。pandasread_sql()接受一个Connection对象作为输入,并且光标是在函数内创建的,因此对我来说,如何应用相同的设置并仍然利用该read_sql()函数并不明显。我错过了什么吗?

python cx-oracle pandas

2
推荐指数
1
解决办法
2660
查看次数

从 python 连接到 oracle 时,sys 用户登录被拒绝

使用 python 3.4 连接到 Oracle 11g 时,我面临登录被拒绝错误。使用 oracle 客户端库版本 5.1.3。我只在用户“sys as sysdba”上观察到了这个问题,但其他用户没有观察到这个问题。我可以使用来自其他数据库客户端的“sys as sysdba”连接到 Oracle。我用下面的代码来连接。

dns = cx_Oracle.makedsn('xxxxxx','1521','db')
con = cx_Oracle.connect('sys as sysdba', 'xxxxx', dns)
Run Code Online (Sandbox Code Playgroud)

请指教,我做错了什么。

谢谢。

oracle cx-oracle python-3.x

2
推荐指数
1
解决办法
1009
查看次数

cx_Oracle 如何将复合/复杂数组传递给 PLSQL 过程?

从本指南中,我能够将简单数据类型(如cx_Oracle.NUMBER)的关联数组传递给 PL/SQL 过程。

CREATE OR REPLACE PACKAGE test
IS
    TYPE t_ids IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
    PROCEDURE foo(p_ids_i IN t_ids);
END;
/
Run Code Online (Sandbox Code Playgroud)

调用它:

ids = cursor.arrayvar(cx_Oracle.NUMBER, [1,2,3])
cursor.callproc('test.foo', [ids])
Run Code Online (Sandbox Code Playgroud)

但是,我想调用以下过程,foo而不是采用复杂类型。

CREATE OR REPLACE PACKAGE test
IS
    TYPE r_foo IS RECORD (id NUMBER, name VARCHAR2(10));
    TYPE t_complex IS TABLE OF r_foo INDEX BY PLS_INTEGER;
    PROCEDURE foo(p_ids_i IN t_complex);
END;
/
Run Code Online (Sandbox Code Playgroud)

我尝试过各种事情,例如:

# Raises NotSupportedError: Variable_TypeByPythonType(): unhandled data type
foos = cursor.arrayvar((cx_Oracle.NUMBER, cx_Oracle.STRING), [(1, …
Run Code Online (Sandbox Code Playgroud)

python oracle plsql cx-oracle

2
推荐指数
1
解决办法
2163
查看次数

python 无法识别 cx_Oracle

更新:确切的解决方案位于标记答案下方的评论中。


在企业redhat linux环境中,Python似乎无法找到连接数据库所需的cx_Oracle包。查看日志:

[user@redhat ~]$ echo $PYTHONPATH
~/.local/lib/python3.4/site-packages
[user@redhat ~]$ cd $PYTHONPATH
[user@redhat site-packages]$ ls -l
total 1912
drwxrwxr-x  2 user user     131 Apr 20 12:00 cx_Oracle-6.2.1.dist-info
-rwxrwxr-x  1 user user 1900997 Apr 20 12:00 cx_Oracle.cpython-34m.so
-rw-rw-r--  1 user user     290 Apr 20 12:00 easy-install.pth
drwxrwxr-x  4 user user     114 Apr 20 12:00 et_xmlfile
drwxrwxr-x  2 user user     117 Apr 20 12:00 et_xmlfile-1.0.1-py3.4.egg-info
drwxrwxr-x  2 user user     150 Apr 20 12:00 jdcal-1.4.dist-info
-rw-rw-r--  1 user user   12553 Apr 20 …
Run Code Online (Sandbox Code Playgroud)

python cx-oracle python-2.7

2
推荐指数
1
解决办法
5868
查看次数

为什么在cx_Oracle.SYSDBA模式下系统登录被拒绝

我正在尝试通过 cx_Oracle 模块连接到 Oracle 12c。使用以下代码登录可以在 cx_Oracle.connect 方法中未提及模式的情况下使用

import cx_Oracle                                                                
ip = 'ip'                                                             
port='1521'                                                                    
SID='orcl'                                                                     
dsn_tns = cx_Oracle.makedsn(ip, port, SID)                                     
db = cx_Oracle.connect('system', 'password', dsn_tns)
Run Code Online (Sandbox Code Playgroud)

但对于以下方式,它显示 cx_Oracle.SYSDBA 模式的无效登录错误。

db = cx_Oracle.connect('system', 'password', dsn_tns, cx_Oracle.SYSDBA) 
Run Code Online (Sandbox Code Playgroud)

错误:

cx_Oracle.DatabaseError: ORA-01017: invalid username/password; logon denied
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?凭据是相同的。我尝试手动登录如下,成功

>sqlplus system/password as sysdba
Run Code Online (Sandbox Code Playgroud)

python oracle cx-oracle oracle12c

2
推荐指数
1
解决办法
3531
查看次数

如何使用 cx_Oracle 在 python 多处理代码中创建连接(或会话)池以连接到 Oracle 数据库?

我有一个很长的时间multiprocessing python code,其中涉及Oracle database在运行期间与多次交互。该代码应该是一个独立的应用程序,它将 24*7 运行并从数据库中获取数据,使用多处理执行它,将结果写回数据库,然后再次轮询数据库以获取新数据并不断重复此循环。我如何创建一个 connection pool (or session pool(我不知道 2, new in python 和 coding )之间的区别来提高代码的性能?需要使用cx_oracle. 任何帮助将不胜感激。提前谢谢了!!

python oracle cx-oracle connection-pooling

2
推荐指数
1
解决办法
3285
查看次数

Python 在 macOS 上“DPI-1047 无法找到 dlopen(libclntsh.dylib)”

我收到以下错误。

cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "dlopen(libclntsh.dylib, 1): image not found"

我发现的一个解决方法是插入 cx_Oracle.init_oracle_client(lib_dir=path)导致 Oracle 客户端库已初始化错误。

但是我不会init_oracle_client在代码中的任何地方调用。我在 Mac 上使用 Python 3.8.11 和 cx_Oracle 8.2.1。

当我最初运行代码时,我没有安装任何 Oracle 客户端。然后我下载了 instantclient_19_8,但将其与 init_oracle_client 一起使用会导致已初始化错误。我在这里看到了这个 https://cx-oracle.readthedocs.io/en/latest/user_guide/initialization.html

我不确定 cx_Oracle 二进制文件在哪里,当我转到具有当前 anaconda 环境的位置时,我看到一个包含自述文件的 cx_Oracle-doc 文件夹。另外,~中还创建了一个oradiag_my_username文件夹。不确定需要修复什么。

python oracle macos cx-oracle

2
推荐指数
1
解决办法
6530
查看次数

cx_Oracle 中的 Python 长时间空闲连接获取:DPI-1080:连接已被 ORA-3113 关闭

我正在运行长时间运行的 Python 可执行文件。启动时使用 cx_Oracle 打开 Oracle 连接。空闲连接超过 45-60 分钟后 - 出现此错误。cx_Oracle 需要任何想法或特殊设置吗?

python oracle networking cx-oracle

2
推荐指数
1
解决办法
7070
查看次数

在Windows上没有Python 3.5的cx_Oracle吗?

我一直在想我肯定会遗漏一些东西.cx_Oracle似乎是Python的主要Oracle DBAPI,并且可能仍在积极开发中.然而,在https://pypi.python.org/pypi/cx_Oracle/5.2上没有Python 3.5(Windows)的下载- 仅适用于Python 2.7和3.4的版本.非官方的Windows Python二进制文件页面(http://www.lfd.uci.edu/~gohlke/pythonlibs/)甚至没有cx_Oracle的部分.

我错过了一些明显的东西吗 Python 3.5已经推出了几个月.Windows上的Python 3.5真的没有二进制版本的cx_Oracle吗?

python windows cx-oracle pip python-3.5

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