con = cx_Oracle.connect(connection_string)
cur = con.cursor()
cur.execute("SET DEFINE OFF")
抛出错误:
DatabaseError
追溯(最近一次通话)
在
1 con = cx_Oracle.connect(connection_string)
2 cur = con.cursor()
3 cur.execute("SET DEFINE OFF")
DatabaseError:ORA-00922:缺少或无效的选项
答案 0 :(得分:0)
如注释中所述,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安装其示例架构。