2017-01-03 1 views
2

Я написал скрипт python для выполнения моего SQL-скрипта. Когда я вручную запустить этот SQL скрипт, используя источник не дает мне какие-либо ошибки просто предупреждение, и он полностью выполняет как:Sql скрипт при запуске vi mysql python дает ошибку

mysql> source the_actual_script.sql 
Database changed 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 

Query OK, 0 rows affected (0.29 sec) 

Query OK, 0 rows affected (0.00 sec) 

mysql> 

Но когда я пытаюсь и запустить его через мой питона код:

import MySQLdb 

db = MySQLdb.connect("aws.eu-central-1.rds.amazonaws.com","prod_user","pass","db_name") 
cursor = db.cursor() 
for line in open("/home/ubuntu/PATCHER/the_check_query.sql"): 
    print cursor.execute(line) 
db.close() 

Это дает мне ошибки:

test.py:8: Warning: PROCEDURE saas_neopostsa.temp_prod does not exist 
    cursor.execute(line) 
test.py:8: Warning: PROCEDURE saas_neopostsa.temp_prod_neopost does not exist 
    cursor.execute(line) 
test.py:8: Warning: PROCEDURE saas_neopostsa.temp_prod_neopostsa does not exist 
    cursor.execute(line) 
test.py:8: Warning: Unknown table 'temp_identity_neopostsa' 
    cursor.execute(line) 
test.py:8: Warning: Unknown table 'temp_identity' 
    cursor.execute(line) 
Traceback (most recent call last): 
    File "test.py", line 8, in <module> 
    cursor.execute(line) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
_mysql_exceptions.OperationalError: (1065, 'Query was empty') 

может кто-то помочь мне, что случилось?

+2

Возможный дубликат [чтение внешнего скрипта sql в python] (http://stackoverflow.com/questions/19472922/reading-external-sql-script-in-python) –

ответ

2

Ошибка MySQL ER_EMPTY_QUERY или Empty Query указывает, что выполняемый запрос является либо пустым, либо значением, которое MySQL не может преобразовать в строку. Я бы просмотрел файл сценария и убедился, что каждая строка имеет инструкцию SQL.

for line in open("/home/ubuntu/PATCHER/the_check_query.sql"): 
    print cursor.execute(line) 
db.close() 

Вы должны рассмотреть with ключевое слово для ваших файловых операций (если ваша версия поддерживает это ключевое слово). Я бы, вероятно, выполнить это с какой-то проверки, что-то вроде:

import MySQLdb 

db = MySQLdb.connect("aws.eu-central-1.rds.amazonaws.com","prod_user","pass","db_name") 
cursor = db.cursor() 

# Use with to open the file,'rb' for compatibility 
with open("/home/ubuntu/PATCHER/the_check_query.sql",'rb') as infile: 
    # Using list comprehension, read lines ecluding non-empty 
    # or lines containing only a newline ('\n') character 
    lines = [ln for ln in infile.readlines() if ln and ln != '\n'] 

# The file is now closed and you have a (somewhat) curated command list 
for line in lines: 
    try: 
     cursor.execute(line) 
    except: 
     print line # see what exactly is being executed 
     # Other exception stuff here 

db.close() 

Это будет, по крайней мере, предоставить вам четкую картину из которых команда приводит к пустой ошибки запроса.

Есть ли пустая строка или сдвоенная точка с запятой (;;) в любом месте файла сценария после 5-го теста? Я немного запутался, так как трассировка стека показывает cursor.execute(line), а не print cursor.execute(line), как в вашем примере кода и не соответствует номеру строки для образца. Является ли код предоставленным полным соответствующим разделом кода, который фактически создал эту трассировку стека?

+0

В нем говорится mysql_exceptions.ProgrammingError: (1064, " У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «DELIMITER $$» в строке 1 ») – Kittystone

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