Sqlalchemy无法连接到mysql服务器

时间:2011-03-01 15:57:30

标签: mysql sqlalchemy

我的遗留mysql 4.0.20服务器在Windows机器上。 我正在linux上开发一个新系统(基于python),需要连接到旧服务器并进行查询等。 我使用普通的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 SELECT DATABASE()   2011-03-01 08:35:04,613 INFO sqlalchemy.engine.base.Engine.0x ... b42c()   回溯(最近一次调用最后一次):

     

connection = engine.connect()     在连接文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/base.py”,第1811行       return self.Connection(self,** kwargs)     在 init 中输入文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/base.py”,第832行       self。 connection = connection或engine.raw_connection()     在raw_connection中输入文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/base.py”,第1874行       return 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行,获取       return self.do_get()     在do_get中输入文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py”,第732行       con = self.create_connection()     在create_connection中的文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py”,第147行       return _ConnectionRecord(self)     在 init 中输入文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/pool.py”,第258行       l.first_connect(self.connection,self)     在first_connect中输入文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/strategies.py”,第151行       dialect.initialize(c)中     文件“/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(connection)     在_check_unicode_returns中输入文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/default.py”,第205行       unicode_for_varchar = check_unicode(sqltypes.VARCHAR(60))     在check_unicode中输入文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/default.py”,第195行       ])。编译(方言=自我)     文件“/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)     在defaulterrorhandler中输入文件“/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.3c1-py2.6-linux-i686.egg/MySQLdb/connections.py”,第36行       提出错误类,错误值   ProgrammingError:(1064,“你的SQL语法有错误。请查看与你的MySQL服务器版本相对应的手册,以便在'(60)附近使用正确的语法)AS anon_1'在第1行”

1 个答案:

答案 0 :(得分:1)

看起来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错误)会传播到连接中指定的处理程序。

关注:Sqlalchemy正在执行的查询可能与旧版本的MySQL不兼容。看起来像是在“_check_unicode_returns”函数中。

您是否尝试过禁用unicode支持?

conn_str = "mysql://user:pass@192.168.171.233/dbd?use_unicode=0"