如何加载预先存在的数据 flask-sqlalchemy

how to load pre-existing data flask-sqlalchemy

我正在使用 flask_restful 编写 REST API 并使用 flask-sqlalchemy 管理 mysql 数据库。我想知道在应用程序启动时将现有数据加载到 table 的最佳做法是什么。

我目前正在使用带有 @app.before_first_request 装饰器的端点调用 db.create_all() 方法。然后我想填写使用 csv 文件中的现有数据创建的 table 之一。代码应该在单独的脚本中还是在函数内推送数据?

谢谢!

我会将加载初始数据库数据与应用程序初始化分开,因为根据我的经验,初始数据可能不会经常更改,并且如果文件较大可能需要一些时间,并且通常不需要在每次加载应用程序时的数据库。

我认为您肯定会在应用程序开发的某个时刻需要数据库迁移,因此我建议设置 Flask-Migrate to handle that, and running its upgrade method on application creation (create_app method if you are using Flask application factories pattern) 来处理数据库迁移。我这样说是因为当您稍后在数据库中引入它时,它会为您省去一些麻烦,该数据库已经填充了使用 db.create_all().

初始化的实际数据

为了用种子数据填充数据库,我会选择 Flask CLI or Flask-Script。在我最近的一个项目中,我为此使用了 Flask-Script,并创建了单独的 manage.py 文件,该文件在其他应用程序管理方法中包含初始数据播种方法,看起来像这样:

@manager.command
def seed():
    "Load initial data into database."
    db.session.add(...)
    db.session.commit()

并且它是 运行 通过以下命令按需提供的:

python manage.py seed