有没有办法在 python 中使用 cx_oracle 执行 sql 脚本文件。
我需要在 sql 文件中执行我的创建表脚本。
原文由 user747858 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法在 python 中使用 cx_oracle 执行 sql 脚本文件。
我需要在 sql 文件中执行我的创建表脚本。
原文由 user747858 发布,翻译遵循 CC BY-SA 4.0 许可协议
另一种选择是使用 SQL*Plus(Oracle 的命令行工具)来运行脚本。您可以使用 subprocess
模块从 Python 调用它 - 这里有一个很好的演练:http: //moizmuhammad.wordpress.com/2012/01/31/run-oracle-commands-from-python-via -sql-plus/ 。
对于像 tables.sql
这样的脚本(注意故意错误):
CREATE TABLE foo ( x INT );
CREATE TABLER bar ( y INT );
您可以使用如下函数:
from subprocess import Popen, PIPE
def run_sql_script(connstr, filename):
sqlplus = Popen(['sqlplus','-S', connstr], stdin=PIPE, stdout=PIPE, stderr=PIPE)
sqlplus.stdin.write('@'+filename)
return sqlplus.communicate()
connstr
与用于 cx_Oracle
的连接字符串相同。 filename
是脚本的完整路径(例如 'C:\temp\tables.sql'
)。该函数打开一个 SQL Plus 会话(使用 ‘-S’ 使它的欢迎消息静音),然后将“@filename”排队发送给它 - 这将告诉 SQL Plus 运行脚本。
sqlplus.communicate
将命令发送到标准输入,等待 SQL*Plus 会话终止,然后将 (stdout, stderr) 作为元组返回。使用上面的 tables.sql
调用此函数将给出以下输出:
>>> output, error = run_sql_script(connstr, r'C:\temp\tables.sql')
>>> print output
Table created.
CREATE TABLER bar (
*
ERROR at line 1:
ORA-00901: invalid CREATE command
>>> print error
这将需要一些解析,具体取决于您想要返回程序其余部分的内容 - 如果它是交互式的,您可以向用户显示整个输出,或者如果您只想检查它是否存在,则扫描“ERROR”一词运行正常。
原文由 Neil Vass 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答854 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
cx_oracle 试图遵守的 PEP-249 实际上并没有这样的方法。
但是,这个过程应该非常简单。把文件的内容拉成一个字符串,用“;”分割字符,然后对结果数组的每个成员调用 .execute。我假设“;”字符仅用于分隔文件中的 oracle SQL 语句。