oracle 从python调用SQL脚本

gg0vcinb  于 2023-01-25  发布在  Oracle
关注(0)|答案(3)|浏览(229)

我有一个名为myscript.sql的sql脚本,如下所示:

-- Comment that I have in my sql script.
MERGE INTO my_table i using
(select several_columns
from my_other_table f
where condition
) f on (my join conditions)
WHEN MATCHED THEN
  UPDATE SET whatever;
  
COMMIT;

我尝试过从python调用它,方法与从SQL Developer工作表调用相同,即:

cursor().execute(r'''@"path_to_my_script\myscript.sql"''')

但它不起作用,将引发以下错误:

DatabaseError: ORA-00900: invalid SQL statement

我该如何执行脚本?

eh57zj3b

eh57zj3b1#

在Oracle中,将多个语句作为单个命令传递是无效的(这有助于防止SQL注入攻击)。如果脚本包含多个语句,则不可能使用单个命令运行它。
如果脚本只有SQL语句(没有PL/SQL语句),则:
1.把脚本读成字符串。
1.在SQL语句终止符;上将字符串拆分为语句
1.打开到数据库的连接。
1.关闭自动提交。
1.分别运行每条语句。
1.最后,可选地,COMMIT事务(在您的情况下,脚本包括COMMIT作为最后一条语句)。
如果您有PL/SQL语句,则需要检查每个语句是SQL还是PL/SQL,并分别以;/(在新行上)终止,然后相应地拆分字符串。

  • (注:还可以在新行中使用/终止SQL语句。如果要在脚本中包括PL/SQL语句,则最简单的方法是在新行中使用/终止所有语句。这意味着对于SQL语句,您应仅包括/,而不包括;。对于PL/SQL语句,您应该使用END;终止代码块,并包含最后一个;,然后在新行中使用/终止语句。)*
smtd7mpg

smtd7mpg2#

您可以读取SQL文件的内容并将其传递给execute()方法。
请看另一个问题及其答案,它们看起来非常相关:reading external sql script in python

j1dl9f46

j1dl9f463#

from sqlalchemy import create_engine

engine = create_engine('postgresql://username:password@host:port/database')
connection = engine.connect()
result = connection.execute("Your SQL QUERY")
connection.close()

相关问题