在我的 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
也许它的格式给了我一个错误,但我不太确定。
有人可以指出我的代码有什么问题吗?
当使用 cx_Oracle 从 Oracle 选择大量数据时,我发现无论使用 pandasread_sql还是 cx_Oracle Cursorfetchall()方法,速度都非常慢。
通过增加 Cursor 的属性,性能得到显着提高arraysize- 让我能够获得不错的性能fetchall()。pandasread_sql()接受一个Connection对象作为输入,并且光标是在函数内创建的,因此对我来说,如何应用相同的设置并仍然利用该read_sql()函数并不明显。我错过了什么吗?
使用 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)
请指教,我做错了什么。
谢谢。
从本指南中,我能够将简单数据类型(如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) 更新:确切的解决方案位于标记答案下方的评论中。
在企业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) 我正在尝试通过 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) 我有一个很长的时间multiprocessing python code,其中涉及Oracle database在运行期间与多次交互。该代码应该是一个独立的应用程序,它将 24*7 运行并从数据库中获取数据,使用多处理执行它,将结果写回数据库,然后再次轮询数据库以获取新数据并不断重复此循环。我如何创建一个 connection pool (or session pool(我不知道 2, new in python 和 coding )之间的区别来提高代码的性能?需要使用cx_oracle. 任何帮助将不胜感激。提前谢谢了!!
我收到以下错误。
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 可执行文件。启动时使用 cx_Oracle 打开 Oracle 连接。空闲连接超过 45-60 分钟后 - 出现此错误。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吗?
cx-oracle ×10
python ×9
oracle ×6
macos ×1
networking ×1
oracle12c ×1
pandas ×1
pip ×1
plsql ×1
python-2.7 ×1
python-3.5 ×1
python-3.x ×1
sql-update ×1
windows ×1