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

标签 python google-app-engine sqlalchemy google-cloud-sql

我正在使用 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 属性?

最佳答案

这意味着 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 模块引起的,该模块充当 stub ,在 import MySQLdb< 时没有 paramstyle 属性 失败。提供了一个 stub connect() 函数,该函数将引发更有用的异常,但由于与 SQLAlchemy 的不幸交互,该错误提供的信息要少得多。

关于python - 运行 GAE 开发服务器时,本地 MySQLdb 连接失败并出现 AttributeError for paramstyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433973/

相关文章:

python - 如何使用spyder在单独的窗口中显示视频

python - 如何处理子进程异常终止?

python - 移动包含旧文件的目录的简单方法

python - SQLAlchemy 过滤时出错

java - 制作组件用不同语言编程的(桌面)软件?

google-app-engine - Java 或 Php 的 Oauth 服务提供者的实现

python - Google AppEngine PYTHON 灵活环境是否支持任务队列?

node.js - 如何在 Google App Engine 上运行迁移

python - 假设多对多关系(sqlalchemy,python),如何避免添加重复项?

python - 如何让 Flask-SQLAlchemy 与应用程序工厂模式一起工作