首页 文章

Sqlalchemy无法连接到mysql服务器

提问于
浏览
0

我的遗留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行, connect return 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中返回_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中换货政... rn 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( 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)文件”/usr/local/lib/python2.6/dist -packages / sqlalchemy / engine / default.py“,第205行,在_check_unicode_returns中unicode_for_varchar = check_unicode(sqltypes.V) ARCHAR(60))文件“/usr/local/lib/python2.6/dist-packages/sqlalchemy/engine/default.py”,第195行,在check_unicode中) . compile(dialect = self)文件“/ 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中引发错误类,errorvalue ProgrammingError :(1064,“你的SQL语法有错误 . 检查与您的MySQL服务器版本对应的手册,以便在'(60)附近使用正确的语法'AS anon_1'在第1行“)

1 回答

  • 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"
    

相关问题