运行 GAE 开发服务器时,本地 MySQLdb 连接失败并出现 AttributeError for paramstyle

Posted

技术标签:

【中文标题】运行 GAE 开发服务器时,本地 MySQLdb 连接失败并出现 AttributeError for paramstyle【英文标题】:Local MySQLdb connection fails with AttributeError for paramstyle when running GAE development server 【发布时间】:2013-12-24 09:34:30 【问题描述】:

我正在使用 Flask-Alchemy 针对 Cloud SQL 构建一个 GAE Flask 应用程序,并在构建应用程序时运行 dev_appserver 来测试它。

但是,如果我将SQLALCHEMY_DATABASE_URI 设置为mysql+gaerdbms:///appname?instance=instanceid URL,则在尝试调用db.create_all() 时会得到以下回溯:

Traceback (most recent call last):
  # earlier lines omitted for brevity
  File "/Project/app/foo.bar/foo/bar/admin/__init__.py", line 26, in init_db
    db.create_all()
  File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 856, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 848, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), tables=tables)
  File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 797, in get_engine
    return connector.get_engine()
  File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 473, in get_engine
    self._engine = rv = sqlalchemy.create_engine(info, **options)
  File "/Project/app/distlib/sqlalchemy/engine/__init__.py", line 332, in create_engine
    return strategy.create(*args, **kwargs)
  File "/Project/app/distlib/sqlalchemy/engine/strategies.py", line 69, in create
    dialect = dialect_cls(**dialect_args)
  File "/Project/app/distlib/sqlalchemy/dialects/mysql/base.py", line 1986, in __init__
    default.DefaultDialect.__init__(self, **kwargs)
  File "/Project/app/distlib/sqlalchemy/engine/default.py", line 124, in __init__
    self.paramstyle = self.dbapi.paramstyle
AttributeError: 'module' object has no attribute 'paramstyle'

什么给了?为什么缺少(需要 DB-API 2.0)paramstyle 属性?

【问题讨论】:

【参考方案1】:

这意味着MySQLdb 模块丢失并且无法导入。 GAE SDK 本身不附带 MySQLdb 客户端库;安装 MySQLdb (as instructed in the SDK documentation):

venv/bin/pip install mysql-python

或使用您的操作系统包管理器在您的系统 python 中安装 MySQLdb。

该错误是由 Google google.appengine.api.rdbms_mysqldb 模块引起的,该模块充当存根,当 import MySQLdb 失败时没有 paramstyle 属性。提供了一个存根 connect() 函数,该函数将引发一个更有帮助的异常,但由于与 SQLAlchemy 的不幸交互,该错误提供的信息要少得多。

【讨论】:

这也可能意味着导入 MySQLdb 存在其他问题。这也很有帮助:***.com/questions/6383310/…

以上是关于运行 GAE 开发服务器时,本地 MySQLdb 连接失败并出现 AttributeError for paramstyle的主要内容,如果未能解决你的问题,请参考以下文章

从本地 GAE 项目连接到 Google Cloud Datastore

从网络中的另一台计算机访问本地 GAE SDK 服务器

本地 GAE java 开发服务器的 Google Pub/Sub 测试策略

GAE项目Intellij远程调试在关闭时不释放端口

GAE 500 服务器错误

Java 中的 GAE Restful Web 服务