我的遗留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行”
答案 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"