sql - “SET DEFINE OFF”在 Python cx_Oracle 中不起作用
问题描述
con = cx_Oracle.connect(connection_string)
cur = con.cursor()
cur.execute("SET DEFINE OFF")
正在抛出错误:
DatabaseError
Traceback(最近一次调用最后一次)在
1 con = cx_Oracle.connect(connection_string)
2 cur = con.cursor()
3 cur.execute("SET DEFINE OFF")
DatabaseError:ORA-00922:缺少或无效选项
解决方案
如注释中所述,SET DEFINE 是一个 SQL*Plus 命令,不被 cx_Oracle 解释。您收到 ORA 错误是因为 cx_Oracle 将语句发送到数据库,而数据库只处理 SQL 或 PL/SQL 语句。
您应该使用绑定变量而不是(不可用的)替换变量。任何类型的字符串替换或插值都是可扩展性问题和安全风险。绑定变量解决了这些问题。(可以说您也可以在 SQL*Plus 中使用绑定变量)。
看看像BindInsert.py这样的例子:
rows = [ (1, "First" ),
(2, "Second" ),
(3, "Third" ),
(4, "Fourth" ),
(5, "Fifth" ),
(6, "Sixth" ),
(7, "Seventh" ) ]
cursor = connection.cursor()
cursor.executemany("insert into mytab(id, data) values (:1, :2)", rows)
检查 cx_Oracle 文档,如
如果要执行 .SQL 文件,则需要编写某种解析器来提取 SQL 语句并单独执行它们。和/或确保简化有关语句结束符的 .SQL 文件语法。例如,查看 cx_Oracle 如何使用此技术通过RunSqlScript安装其示例模式。
推荐阅读
- javascript - 未捕获的类型错误:使用 Rcipe API 时无法读取未定义的属性“地图”
- javascript - 创建一个过渡模板以供重复使用
- android - 将 xml 文件添加到其存储位置后如何刷新 SharedPreferences
- elasticsearch - 如何在elasticsearch中设置聚合条件
- excel - 电源查询 excel 2013 中的数据未检索?
- spring-boot - 关于如何使用 jpa-repositiroies 在 Spring-Boot 上持久保存数据的指南/教程
- java - 滚动时如何将数据加载到 RecyclerView
- c# - 如何为模式编写正则表达式,例如由空格分隔的一系列数字和字符串对。模式 -> n
细绳 - go - 如何使用 NTLM 身份验证打开浏览器
- debugging - 如何在 WPA 或 PerfView 中查看磁盘是否已满