2016-07-28 2 views
-1

У меня есть скрипт python, который обрабатывает MySQL через соединитель mysqldb. Тот же скрипт отлично работает на моей машине OSX, когда он ломается, бросая исключение ошибки MySql при запуске на машине Ubuntu.скрипт python вызывает ошибку mysql при запуске на Ubuntu, но не при запуске на OSX

Детали обеих систем ниже:

OSX -

питон --version => Python 2.7.11 (установлен хотя Homebrew)
который питона =>/USR/местные/бен/Python
MySQL --version => MySQL Вер 14.14 DISTRIB 5.7.10, для osx10.9 (x86_64) с использованием EditLine обертка

Ubuntu -

питон --version => Python 2.7.6 (система Python по умолчанию)
который питона =>/USR/бен/питон
MySQL --version => MySQL Ver 14.14 Distrib 5.5.50, для Debian-Linux-гну (x86_64) с использованием Readline 6.3

ошибка я получаю во время выполнения скрипта на поле Ubuntu является:

Traceback (most recent call last): 
    File "my_program.py", line 364, in <module> 
    dao = DataAccessObject(debugger) 
    File "/home/path_to_file/project/handle_storage.py", line 42, in __init__ 
    self.cur.execute(create_restaurant_table) 
    File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 205, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/local/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL, some_time_column DATETIME NOT NULL, record_hash TEXT NOT NULL, PRIMARY K' at line 1") 

Пожалуйста, помогите мне понять, что это такое, что происходит не так здесь ? Если это действительно проблема с моим кодом, как это предлагается в сообщении об ошибке выше, почему скрипт работает отлично в случае OSX-машины?

Линия, на которой пробивается запрос как на вышеприведенном исключением является:

CREATE TABLE IF NOT EXISTS my_table (id int NOT NULL AUTO_INCREMENT, name TEXT, area TEXT, address TEXT, locality TEXT, fee_type TEXT, charge TEXT, cost TEXT, stuff TEXT, rating TEXT, later TEXT, type TEXT, cityCharge TEXT, record_entry_at DATETIME(6) NOT NULL, as_on DATETIME NOT NULL, record_hash TEXT NOT NULL, PRIMARY KEY (id)); 
+1

Учитывая, что ошибка указывает на ошибку sql, вероятно, было бы полезно отправить запрос, в котором он не работает. Судя по информации о версии, которую вы предоставили, обе системы используют разные версии MySQL; это справедливое предположение, что ваш запрос использует что-то действительное в одной версии, которая недействительна в другом. – Uueerdo

ответ

1

Некоторые быстро исследование в официальной документации для данного типа DATETIME данных показывает, что доли секунды спецификатор не был введен до 5.6.4 ,

MySQL 5.6.4 и выше расширяет фракционный поддержку секунд ...

Это был путь документации я следовал:

  1. http://dev.mysql.com/doc/refman/5.7/en/datetime.html
  2. http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
  3. http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html (вручную изменил URL-адрес «5.7» в «5.6», чтобы перейти к этому).
+0

Да, я сам решил эту проблему, обновив MySql в ящике Ubuntu, хотя я подозревал, что проблема связана с самой версией, я не очень глубоко погрузился в нее. @Uueerdo Спасибо в любом случае за этот указатель. :) – qre0ct

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