Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql &引用;设置“定义偏移”;无法在Python cx_Oracle中工作_Sql_Python 3.x_Cx Oracle - Fatal编程技术网

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)