GAE dev服务器导致MySQL连接错误 - 类似的连接代码在交互式shell中工作

时间:2015-05-26 08:23:13

标签: python mysql google-app-engine

我试图在我的本地计算机上使用Google App Engine的MySQL和sqlalchemy开发服务器。 出于某种原因,我可以在交互式会话中连接到我的MySQL服务器,但是从开发服务器运行时,相同的连接代码会失败。

我安装了sqlalchemy的virtualenv,并且我已经将virtualenv的site-packages目录符号链接到开发服务器可以看到的目录[a]。 我还在系统范围内安装了mysql-connector,并且已经将系统范围的安装符号链接到我的virtualenv的站点包中。

这是一个交互式会话,显示了libs设置正确(assemblies是我的GAE项目的根目录):

>>> import sqlalchemy as sa
>>> import sqlalchemy.orm as orm
>>> import assemblies.models as models
>>> engine = sa.create_engine('mysql+mysqlconnector://<username>:<password>@localhost/test')
>>> S = orm.sessionmaker(bind=engine)
>>> session = S()
>>> session.query(models.User).all()
[<assemblies.models.User object at 0x0000000003043978>, <assemblies.models.User
object at 0x0000000003043F28>, <assemblies.models.User object at 0x0000000003043
F98>]

但是,当我在GAE程序中运行几乎相同的代码时,我从MySQL服务器收到连接错误。 这是主要的应用文件:

import sqlalchemy as sa
import sqlalchemy.orm as orm
engine = sa.create_engine(<db url>, echo=True)
Session = orm.sessionmaker(bind=engine)
import models as models
from google.appengine.api import users

<unrelated JINJA stuff etc.>

class Users(webapp2.RequestHandler):
    def get(self):
        session = Session()
        users = session.query(models.User).all()

这会引发连接错误:

File "D:\gaetest\assemblies\main.py", line 34, in get
  users = session.query(models.User).all()
File "D:\gaetest\assemblies\lib\sqlalchemy\orm\query.py", line 2398, in all
  return list(self)
...
File "D:\gaetest\assemblies\lib\mysql\connector\network.py", line 251, in recv_plain
  errno=2055, values=(self.get_address(), _strioerror(err)))
OperationalError: (mysql.connector.errors.OperationalError) 2055: Lost connectio n to MySQL server at 'localhost:3306', system error:

我检查了数据库网址并确保我激活了virtualenv。 什么可能导致这种连接问题? GAE是否需要额外的配置才能使用?

[a]:我基本上使用official instructions on "vendoring",但是供应商目录(在说明中称为lib)是virtualenv网站包的符号链接。当我独立于GAE开发服务器工作时,这让virtualenv可以看到lib。

1 个答案:

答案 0 :(得分:1)

问题是这个

  

我在系统范围内安装了 mysql-connector ,我已将系统范围的安装符号链接到我的virtualenv的网站包中。

GAE不支持mysql-connector。 支持使用MySQLdb的mysql-python。 因此,您必须安装mysql-python。 在系统范围内安装它并使用OP中提到的符号链接技巧可以正常工作。