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

时间:2019-01-10 12:46:25

标签: python mysql rest flask-sqlalchemy flask-restful

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

我认为您肯定会在应用程序开发的某个时刻需要数据库迁移,因此建议您设置Flask-Migrate来处理该问题,并在应用程序创建时运行其升级方法(create_app方法(如果您使用的是Flask application factories pattern),它将处理数据库迁移。我之所以这样说是因为,当您稍后在已经用db.create_all()初始化的实际数据填充的数据库中进行介绍时,它将为您省去一些麻烦。

对于用种子数据填充数据库,我将使用Flask CLIFlask-Script。在我最近的一个项目中,我为此使用了Flask-Script,并创建了一个单独的manage.py文件,该文件除其他应用程序管理方法外还包含初始数据播种方法,如下所示:

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

它通过以下命令按需运行:

python manage.py seed