【发布时间】:2019-06-23 08:25:43
【问题描述】:
我想使用 cx_Oracle 执行一个 .sql 文件。我必须执行许多文件,并且语句可能包含也可能不包含';'终止前。我已经完成了以下解决方案
f = open('tabledefinition.sql')
full_sql = f.read()
sql_commands = full_sql.split(';')
for sql_command in sql_commands:
curs.execute(sql_command)
但这不起作用。 有什么方法可以将文件作为参数传递,就像我为连接所做的那样:
dsn_tns = cx_Oracle.makedsn('server', 'port', service_name='service_name')
conn = cx_Oracle.connect(user='username', password='password', dsn=dsn_tns)
喜欢 sql_file = 'mysql.sql' ?
【问题讨论】:
-
你说的“不起作用”是什么意思?请添加您收到的相关错误消息。此外,用分号拆分 sql 可能适用于多个 SQL 查询,但对于 PL/SQL 块肯定会失败。向我们展示您要运行的 sql 文件中的一些示例条目。
-
理想情况下,我从命令提示符使用命令 -> user/password@host:port/db_service .@my_sql.sql 。所以我想知道是否有办法将 .@my_sql.sql 作为连接函数的参数?
-
那么,the other answer 从您复制的代码中截取的问题中呢?
-
我可以使用 os.system 或 subprocess.Popen() 做到这一点,但我的问题是通过使用 cx_Oracle 来实现我的目标
-
在这种情况下,您显然已经看到并尝试了正确的答案。它仍然适用;无法将文件传递给 cx_oracle。即使有,它仍然会依赖文件具有正确的格式(就像您尝试的解决方案一样)。因此,如果您在将文件内容转换为 cx_oracle 可以解析的格式方面需要帮助,请添加@KaushikNayak 要求的信息。