python 脚本在 Ubuntu 上 运行 时抛出 mysql 错误,但在 OSX 上 运行 时不会
python script throws mysql error when run on Ubuntu but not when run on OSX
我有一个 python 脚本,它通过 mysqldb 连接器处理 MySQL。相同的脚本 运行 在我的 OSX 机器上完全正常,而在 Ubuntu 机器上 运行 时它中断并抛出 MySql 错误异常。
以下两个系统的详细信息:
OSX -
python --version => Python 2.7.11 (installed though Homebrew)
which python => /usr/local/bin/python
mysql --version => mysql Ver 14.14 Distrib 5.7.10, for osx10.9 (x86_64) using EditLine wrapper
Ubuntu -
python --version => Python 2.7.6 (default system Python)
which python => /usr/bin/python
mysql --version => mysql Ver 14.14 Distrib 5.5.50, for debian-linux-gnu (x86_64) using 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")
请帮助我了解这里出了什么问题?如果这确实是我的代码的问题,如上面的错误消息所建议的那样,为什么脚本 运行ning 在 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));
对 DATETIME 数据类型的官方文档进行一些快速研究后发现,小数秒说明符直到 5.6.4 才引入。
MySQL 5.6.4 and up expands fractional seconds support...
这是我遵循的文档路径:
我有一个 python 脚本,它通过 mysqldb 连接器处理 MySQL。相同的脚本 运行 在我的 OSX 机器上完全正常,而在 Ubuntu 机器上 运行 时它中断并抛出 MySql 错误异常。
以下两个系统的详细信息:
OSX -
python --version => Python 2.7.11 (installed though Homebrew)
which python => /usr/local/bin/python
mysql --version => mysql Ver 14.14 Distrib 5.7.10, for osx10.9 (x86_64) using EditLine wrapper
Ubuntu -
python --version => Python 2.7.6 (default system Python)
which python => /usr/bin/python
mysql --version => mysql Ver 14.14 Distrib 5.5.50, for debian-linux-gnu (x86_64) using 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")
请帮助我了解这里出了什么问题?如果这确实是我的代码的问题,如上面的错误消息所建议的那样,为什么脚本 运行ning 在 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));
对 DATETIME 数据类型的官方文档进行一些快速研究后发现,小数秒说明符直到 5.6.4 才引入。
MySQL 5.6.4 and up expands fractional seconds support...
这是我遵循的文档路径: