如何加载预先存在的数据 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
我正在使用 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