我试图在我的本地计算机上使用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。
答案 0 :(得分:1)
问题是这个
我在系统范围内安装了 mysql-connector ,我已将系统范围的安装符号链接到我的virtualenv的网站包中。
GAE不支持mysql-connector。 只支持使用MySQLdb的mysql-python。 因此,您必须安装mysql-python。 在系统范围内安装它并使用OP中提到的符号链接技巧可以正常工作。