Only Mookrs

A fugitive from the world.

Flask-SQLAlchemy + MySQL + Python 3

TL;DR: pip install PyMySQL,数据库连接使用 mysql+pymysql://username:password@server/db

按照 Flask-SQLAlchemy 文档的说明,配置好 SQLALCHEMY_DATABASE_URI = 'mysql://username:password@server/db' 后操作 MySQL 报错 ImportError: No module named 'MySQLdb'。既然缺少 MySQLdb 这个模块,按照常规方法缺啥补啥吧,执行 pip install MySQL-python 却报错 ImportError: No module named 'ConfigParser'。查了一下,这是由于 MySQL-python 不支持 Python 3(MySQL-3.23 through 5.5 and Python-2.4 through 2.7 are currently supported)。

于是 找到了一个替代—— PyMySQL(还有一个 可能的选择oursql)。执行 pip install PyMySQL,将数据库连接改为 mysql+pymysql://username:password@server/db,接下来的操作就一切正常了。

其他备忘:

  1. 执行 Flask-Migratepython manage.py db migrate 时报错 sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1049, "Unknown database 'testdb'"),是因为要先建好数据库才能访问,SQLAlchemy 不会自己创建数据库
  2. 数据库连接和依赖配置好后,依次执行:

    $ python manage.py db init
    $ python manage.py db migrate
    $ python manage.py db upgrade

Comments