Sql &引用;设置“定义偏移”;无法在Python cx_Oracle中工作
正在抛出错误: 数据库错误Sql &引用;设置“定义偏移”;无法在Python cx_Oracle中工作,sql,python-3.x,cx-oracle,Sql,Python 3.x,Cx Oracle,正在抛出错误: 数据库错误 回溯(最近一次呼叫最后一次) 在 DatabaseError:ORA-00922:缺少或无效选项如注释中所述,SET DEFINE是SQL*Plus命令,不由cx\U Oracle解释。得到ORA错误是因为cx_Oracle将语句发送到数据库,而数据库只处理SQL或PL/SQL语句 您应该使用绑定变量,而不是(不可用)替换变量。任何类型的字符串替换或插值都是一个可伸缩性问题和安全风险。绑定变量可以解决这些问题。(可以说,您也可以在SQL*Plus中使用绑定变量) 看看
回溯(最近一次呼叫最后一次) 在
DatabaseError:ORA-00922:缺少或无效选项如注释中所述,SET DEFINE是SQL*Plus命令,不由cx\U Oracle解释。得到ORA错误是因为cx_Oracle将语句发送到数据库,而数据库只处理SQL或PL/SQL语句 您应该使用绑定变量,而不是(不可用)替换变量。任何类型的字符串替换或插值都是一个可伸缩性问题和安全风险。绑定变量可以解决这些问题。(可以说,您也可以在SQL*Plus中使用绑定变量) 看看这样的例子: 查看cx\U Oracle文档,如
如果要执行.SQL文件,则需要编写某种解析器来提取SQL语句并单独执行它们。和/或确保简化有关语句结束符的.SQL文件语法。例如,请参阅cx_Oracle如何使用此技术通过安装示例架构。
SET DEFINE
是一个sqlplus命令,而不是有效的SQL命令。在sqlplus之外您不需要它,但我在oraclesqldeveloper中使用它,它工作得很好。但是需要从python脚本运行。SQL开发人员只是尝试与sqlplus兼容,但在Oracle工具之外不需要该选项。它是工具(sqlplus或SQL Developer)的一个选项—它不是SQL语句,所以基本上没有办法通过Python运行它。在Oracle工具之外,您不需要这些。
con = cx_Oracle.connect(connection_string)
cur = con.cursor()
cur.execute("SET DEFINE OFF")
1 con = cx_Oracle.connect(connection_string)
2 cur = con.cursor()
3 cur.execute("SET DEFINE OFF")
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)