Sqlalchemy не может подключиться к серверу MySQL - PullRequest
0 голосов
/ 01 марта 2011

Мой старый сервер mysql 4.0.20 находится на компьютере с Windows. Я разрабатываю новую систему (на основе Python) на Linux, которая должна подключаться к устаревшему серверу и делать запросы и т. Д. Я успешно подключился с использованием простого MySQLdb и django. У меня проблемы с подключением с помощью sqlalchemy. Вот код:

conn_str = "mysql://user:pass@192.168.171.233/dbd"
engine = create_engine(conn_str, echo=True)
metadata = MetaData(engine)
connection = engine.connect()

и стек ошибок, который я получаю:

2011-03-01 08: 35: 04,613 INFO sqlalchemy.engine.base.Engine.0x ... b42c ВЫБРАТЬ БАЗУ ДАННЫХ () 2011-03-01 08: 35: 04,613 ИНФОРМАЦИЯ sqlalchemy.engine.base.Engine.0x ... b42c () Traceback (последний вызов был последним):

соединение = engine.connect () Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/base.py", строка 1811, в соединении вернуть self.Connection (self, ** kwargs) Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/base.py", строка 832, в init self. connection = connection или engine.raw_connection () Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/base.py", строка 1874, в raw_connection вернуть self.pool.unique_connection () Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py", строка 142, в unique_connection return _ConnectionFairy (self) .checkout () Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py", строка 369, в __init rec = self._connection_record = pool.get () Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py", строка 213, в get вернуть self.do_get () Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py", строка 732, в do_get con = self.create_connection () Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py", строка 147, в create_connection вернуть _ConnectionRecord (self) Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py", строка 258, в init l.first_connect (self.connection, self) Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/strategies.py", строка 151, в first_connect dialect.initialize (с) Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/dialects/mysql/base.py", строка 1753, в инициализации default.DefaultDialect.initialize (self, connection) Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/default.py", строка 159, в инициализации self.returns_unicode_strings = self._check_unicode_returns (соединение) Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/default.py", строка 205, в _check_unicode_returns unicode_for_varchar = check_unicode (sqltypes.VARCHAR (60)) Файл "/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/default.py", строка 195, в check_unicode .]) Составляет (говор = сам) Файл "/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.3c1-py2.6-linux-i686.egg/MySQLdb/cursors.py" в строке 173 выполнить self.errorhandler (self, exc, value) Файл "/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.3c1-py2.6-linux-i686.egg/MySQLdb/connections.py", строка 36, в defaulterrorhandler поднять errorclass, errorvalue ProgrammingError: (1064, «У вас есть ошибка в вашем синтаксисе SQL. Проверьте правильность синтаксиса для руководства, соответствующего вашей версии сервера MySQL, для использования рядом с '(60)) AS anon_1' в строке 1")

1 Ответ

1 голос
/ 01 марта 2011

Похоже, что MySQL сообщает об синтаксической ошибке в одном из ваших операторов SQL:

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
'(60)) AS anon_1' at line 1

Похоже, что MySQL возражает против оператора, который содержит строку:

(60)) AS anon_1

ПРИМЕЧАНИЕ: я не знаком с Sqlalchemy, но мне кажется, что исключение (ошибка SQL из оператора) распространяется до обработчика, указанного в соединении.

FOLLOWUP: Вероятно, запрос, который выполняет Sqlalchemy, несовместим с более старой версией MySQL. Похоже, это в функции "_check_unicode_returns".

Вы пытались отключить поддержку юникода?

conn_str = "mysql://user:pass@192.168.171.233/dbd?use_unicode=0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...