【问题标题】:Flask-SQLAlchemy with Google App Engine only works in interactive console带有 Google App Engine 的 Flask-SQLAlchemy 仅适用于交互式控制台
【发布时间】:2014-03-07 06:00:44
【问题描述】:

我正在尝试让我的 Google App Engine 应用与 Flask-SQLAlchemy 一起使用。我收到错误消息:

AttributeError: 'module' object has no attribute 'paramstyle'

我已按照此答案 (Local MySQLdb connection fails with AttributeError for paramstyle when running GAE development server) 中的说明进行操作,因此我不再在交互式控制台中收到错误消息(当我创建应用程序上下文时)。

但是,当我在本地 GAE 中运行应用程序时,错误仍然出现。为什么这仍然发生?我正在运行 OSX Mavericks。完整的跟踪:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 266, in Handle
    result = handler(dict(self._environ), self._StartResponse)
  File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/conor/Documents/Projj/lib/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/conor/Documents/Projj/financey.py", line 117, in login_view
    userObj = get_user(username)
  File "/Users/conor/Documents/Projj/financey.py", line 88, in get_user
    return db.session.query(User).filter_by(username=username).first()
  File "/Users/conor/Documents/Projj/lib/sqlalchemy/orm/scoping.py", line 149, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/Users/conor/Documents/Projj/lib/sqlalchemy/util/_collections.py", line 864, in __call__
    return self.registry.setdefault(key, self.createfunc())
  File "/Users/conor/Documents/Projj/lib/flask_sqlalchemy/__init__.py", line 139, in __init__
    bind=db.engine,
  File "/Users/conor/Documents/Projj/lib/flask_sqlalchemy/__init__.py", line 780, in engine
    return self.get_engine(self.get_app())
  File "/Users/conor/Documents/Projj/lib/flask_sqlalchemy/__init__.py", line 797, in get_engine
    return connector.get_engine()
  File "/Users/conor/Documents/Projj/lib/flask_sqlalchemy/__init__.py", line 473, in get_engine
    self._engine = rv = sqlalchemy.create_engine(info, **options)
  File "/Users/conor/Documents/Projj/lib/sqlalchemy/engine/__init__.py", line 332, in create_engine
    return strategy.create(*args, **kwargs)
  File "/Users/conor/Documents/Projj/lib/sqlalchemy/engine/strategies.py", line 69, in create
    dialect = dialect_cls(**dialect_args)
  File "/Users/conor/Documents/Projj/lib/sqlalchemy/dialects/mysql/base.py", line 1985, in __init__
    default.DefaultDialect.__init__(self, **kwargs)
  File "/Users/conor/Documents/Projj/lib/sqlalchemy/engine/default.py", line 124, in __init__
    self.paramstyle = self.dbapi.paramstyle
AttributeError: 'module' object has no attribute 'paramstyle'

编辑:在尝试进一步诊断问题时,当我在 GAE 交互式控制台(浏览器中)import MySQLdb 时收到错误 ImportError: No module named _mysql

【问题讨论】:

    标签: python google-app-engine sqlalchemy flask


    【解决方案1】:

    看了很久,调试了很久,终于发现了问题所在。当您运行 GAE 开发服务器时,必须准确告知 dev_appserver 您要连接到哪个 MySQL 实例。您使用的连接字符串(例如在 Python 中)无关紧要。连接字符串仅确定数据库名称和实例。但是,如果您从 ipython 控制台运行,SQLAlchemy 可以很好地解决这个问题。这可能是由于在引擎盖下使用了不同的驱动程序。

    希望这可以为其他人省去很多麻烦。像这样运行你的 dev_appserver.py:

    dev_appserver.py --mysql_host=<Cloud SQL IP> --mysql_user=root --mysql_password=<Cloud SQL root password> <application directory>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 2010-12-19
      • 2010-11-06
      • 2020-09-12
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      相关资源
      最近更新 更多