【问题标题】:How to execute DML statements that contain semi colons using cx_oracle python lib如何使用 cx_oracle python lib 执行包含分号的 DML 语句
【发布时间】:2020-11-05 07:46:15
【问题描述】:

目前我使用 cursor.execute() 方法执行多个 DML 语句。我使用 ; 拆分语句分隔符并将每个语句传递给 cursor.execute() 方法。在我遇到一些在 SQL 语句本身中包含分号的语句之前,这种方法运行良好。

我尝试使用 cursor.executemany() 方法,通过传递多个语句而不用分号分隔。但是声明参数 value 会引发错误。但是我执行的所有语句都是静态的,我不需要任何序列或迭代。

cursor.executemany(sqlCommands,1,batcherrors=True)

TypeError:需要字符串、unicode 或缓冲区对象

cursor.executemany(sqlCommands,'',batcherrors=True)

TypeError:参数应该是序列/字典列表或指定语句执行次数的整数

如何使用 cx_oracle python lib 处理 SQL 语句中的分号

【问题讨论】:

  • 能否请您出示您的代码,并可能提供您的问题示例,以便我们为您提供帮助
  • 感谢您的回复。我找到了另一种使用 sqlparse lib 拆分查询的方法。我会关闭这个帖子

标签: python sql database cx-oracle


【解决方案1】:

您必须删除尾随的分号。它们不是 SQL 语句的一部分,Oracle 数据库不接受它们 - 正如您所发现的。分号是一些工具(如 SQL*Plus)将任何前面的文本发送到数据库的指示符。

如何删除分号取决于您在做什么。最好限制您的输入文件语法,让您的生活更轻松。示例设置脚本SampleEnv.py 之所以有效,是因为它要求输入文件语句有一个尾部斜杠。

cx_Oracle 的executemany() 函数使用许多 个数据值执行一个 语句。它不执行多个语句。参考文档Batch Statement Execution and Bulk Loading。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2011-11-25
    • 2014-09-23
    • 2016-07-24
    • 2011-10-21
    • 2013-12-05
    相关资源
    最近更新 更多