Как выполнить файл.sql на cx_oracle?

Я хочу выполнить файл.sql, используя cx_Oracle. Я должен выполнить много файлов, и операторы могут содержать или не содержать ';' до окончания. Я пошел, хотя следующее решение

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'?

1 ответ

Вы можете запустить SQL как есть, используя модуль:

      from subprocess import Popen, PIPE

Затем:

      sqlrun = Popen(['sqlplus', 'User/Pass@DBINSTANCE'], shell=False , stdin=PIPE, stdout=PIPE, stderr=PIPE , encoding='utf8')

sqlrun.stdin.write('@' + 'tabledefinition.sql')

stdout, stderr = sqlrun.communicate()

статус возврата: sqlrun.returncode
Выходные строки: stdout, stderr

Это для выполнения оболочки Unix.

Другие вопросы по тегам