如何在 Heroku 上部署包含 MySQLdb 代码的 Flask REST API?

How to deploy a Flask REST API containing MySQLdb code on Heroku?

大多数教程只展示了如何在 Heroku 上部署一个简单的 Flask hello world 应用程序。但是我有一个 Flask 应用程序,其中包含带有 GET 和 POST 请求的 URL,它们使用 MySQLdb 库从数据库中获取数据。

如何在 Heroku 上设置此类应用程序?目前我的本地机器上有一个 MySQL 数据库,代码使用它来获取数据。 Flask 代码包含许多由 API 调用调用的函数。例如:

@app.route('/display_table', methods=['POST'])
def display_webstats():
    db = MySQLdb.connect("localhost", "root", "root", "db_name")
    cursor = db.cursor()
    cursor.execute("select * from table_name")
    ws = cursor.fetchall()
    return jsonify(ws), 200

如何在 Heroku 上部署此类应用程序?

  1. 确保您的依赖项在 requirements.txtPipfilePipfile.lock 中列出。

  2. Select a MySQL addon 并提供它,例如

    heroku addons:create cleardb:ignite
    
  3. Update your code 连接到插件提供的任何环境变量提供的数据库,例如CLEARDB_DATABASE_URL。您可以将 os.getenv()default 参数一起使用以回退到您的开发环境中:

    import os
    
    database_url = os.getenv(
        'CLEARDB_DATABASE_URL',
        default='mysql://root:root@localhost/db_name',  # For local development
    )
    

    集中您的数据库连接逻辑可能也是一个好主意,这样就不会在每个控制器中都完成了。 Flask-SQLAlchemy 之类的东西可能有助于简化连接和查询数据库。如果您需要其中之一,它还提供了一个 ORM。

  4. 部署。

  5. 假设你有它们,运行 你通过 heroku run 在 Heroku 上迁移。如果您不使用迁移库,我强烈建议您开始。 Flask-Migrate 可能很合适。

    另一种方法是跨环境手动创建和维护架构,time-consuming,容易出错,令人沮丧。