我正在使用REST API
编写flask_restful
,并使用mysql
管理flask-sqlalchemy
数据库。我想知道在应用启动时将现有数据加载到表中的最佳实践是什么。
我目前正在使用带有db.create_all()
装饰器的端点来调用@app.before_first_request
方法。然后,我想填写一个用csv
文件中的现有数据创建的表之一。代码应该在单独的脚本中还是在函数中推送数据?
谢谢!
答案 0 :(得分:0)
我会将加载初始数据库数据与应用程序初始化分开,因为根据我的经验,初始数据可能不会经常更改,并且如果文件较大,可能会花费一些时间,并且通常不需要每次都将其重新加载到数据库中应用程序加载时间。
我认为您肯定会在应用程序开发的某个时刻需要数据库迁移,因此建议您设置Flask-Migrate来处理该问题,并在应用程序创建时运行其升级方法(create_app
方法(如果您使用的是Flask application factories pattern),它将处理数据库迁移。我之所以这样说是因为,当您稍后在已经用db.create_all()
初始化的实际数据填充的数据库中进行介绍时,它将为您省去一些麻烦。
对于用种子数据填充数据库,我将使用Flask CLI或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