2016-04-12 6 views
1

Я ищу, чтобы запустить следующее test.sql, находящееся в папке на моем C: диске. Я играл с cx_Oracle и просто не могу заставить его работать.Запуск всего скрипта SQL через python

test.sql содержит следующее.

CREATE TABLE MURRAYLR.test 
(customer_id number(10) NOT NULL, 
    customer_name varchar2(50) NOT NULL, 
    city varchar2(50) 
); 

CREATE TABLE MURRAYLR.test2 
(customer_id number(10) NOT NULL, 
    customer_name varchar2(50) NOT NULL, 
    city varchar2(50) 
); 

Это мой код:

import sys 
import cx_Oracle 
connection = cx_Oracle.connect('user,'password,'test.ora') 
cursor = connection.cursor() 
f = open("C:\Users\desktop\Test_table.sql") 
full_sql = f.read() 
sql_commands = full_sql.split(';') 
for sql_command in sql_commands: 
    cursor.execute(sql_command) 
    cursor.close() 
connection.close() 
+0

Вы упомянули Oracle и ваш код выглядит как Oracle, но вы отметили это с помощью SQL-сервера. Какие СУБД вы используете? –

+0

Я использую Oracle Developer на Oracle BD –

+0

, что вы пробовали с помощью cx_oracle? это полезно: http://www.oracle.com/technetwork/articles/dsl/prez-python-queries-101587.html ?? – trans1st0r

ответ

1

Этот ответ применим только в том случае, если ваш файл test.sql содержит новые символы '\ n \' (например, мои, которые я получил от копирования в ваш код sql). Вам нужно будет удалить их в своем коде, если они присутствуют. Для того, чтобы проверить, сделать

print full_sql 

Чтобы исправить «\ п-х,

sql_commands = full_sql.replace('\n', '').split(';')[:-1] 

выше должно помочь.

Он удаляет '\ n и удаляет пустой токен в конце, когда разделяет строку sql.

+0

Я, хотя вы пригвоздили его, я добавил немного дополнительного кода в sql и снова сломался. НАЧАЛО ИСПОЛНИТЕ СМОТРЕТЬ «DROP table test1»; ИСКЛЮЧЕНИЕ КОГДА ДРУГИЕ, ЧЕМ ЕСЛИ SQLCODE! = -942 THEN RAISE; END IF; END; –

+0

Можете ли вы показать ошибку? Я вижу, что с этой новой строкой некоторые операторы имеют пробелы вокруг них, поэтому, возможно, это поможет: sql_commands = [i.strip() для i в sql_commands] ' – trans1st0r

0

MURRAYLR.test не приемлемо имя таблицы в любой СУБД я использовал. Объект соединения cx_oracle.connect возвращает уже выбранную схему. Чтобы переключиться на другую схему, установите поле current_schema в объекте подключения или добавьте using <Schemaname>; в свой файл sql. Очевидно, убедитесь, что схема существует.

+0

Отсутствует; в конце концов, это не проблема. См. Http://www.oracle.com/technetwork/articles/dsl/prez-python-queries-101587.html – trans1st0r

+0

nope мой SQL работает отлично и создает таблицы в схеме MURRAYLR. Спасибо за ваше предложение. –

+0

@LeeMurray См. Расширенный ответ. – ventsyv

Смежные вопросы