【问题标题】:python script throws mysql error when run on Ubuntu but not when run on OSXpython脚本在Ubuntu上运行时会引发mysql错误,但在OSX上运行时不会
【发布时间】:2016-12-03 09:53:14
【问题描述】:

我有一个通过 mysqldb 连接器处理 MySQL 的 python 脚本。相同的脚本在我的 OSX 机器上运行得非常好,但在 Ubuntu 机器上运行时会抛出 MySql 错误异常。

以下两个系统的详细信息:

OSX -

python --version => Python 2.7.11(通过 Homebrew 安装)
其中 python => /usr/local/bin/python
mysql --version => mysql Ver 14.14 Distrib 5.7.10,适用于 osx10.9 (x86_64) 使用 EditLine 包装器

Ubuntu -

python --version => Python 2.7.6(默认系统 Python)
其中 python => /usr/bin/python
mysql --version => mysql Ver 14.14 Distrib 5.5.50,适用于使用 readline 6.3 的 debian-linux-gnu (x86_64)

我在 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));

【问题讨论】:

  • 鉴于该错误明确表示一个 sql 错误,发布它失败的查询可能会有所帮助。从您提供的版本信息来看,两个系统在 MySQL 上运行的版本不同;可以公平地猜测,您的查询使用了在一个版本中有效但在另一个版本中无效的内容。

标签: mysql python-2.7 ubuntu mysql-python mysql-error-1064


【解决方案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”以获取此地址)。

【讨论】:

  • 是的,我通过在Ubuntu机器上升级MySql自己解决了这个问题,虽然我怀疑问题出在版本本身,但我并没有真正深入研究它。 @Uueerdo 无论如何感谢这个指针。 :)
猜你喜欢
  • 2011-10-20
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多