通过脚本将flask扩展到seed数据库

Flask-Seeder的Python项目详细描述


砂箱播种机

Build StatusCoverage Status

Flask Seeder是一个Flask扩展,用于帮助对数据库进行初始数据播种,例如在第一次部署应用程序时。

这个扩展的主要关注点是帮助填充数据一次,例如在演示应用程序中,数据库可能会一次又一次地被清除,但是您仍然希望用户可以使用一些基本数据。

安装

pip install Flask-Seeder

这将安装flask seeder扩展并添加一个flask seed子命令,检查它以查看支持哪些参数!

播种机

flask seeder提供了一个基类Seeder,其中包含一个数据库句柄。 通过对Seeder进行子类化并实现一个run()方法,您可以访问数据库句柄对象,并可以开始在数据库中植入数据。

所有播种机必须位于seeds/目录中的某个位置,并从Seeder继承,否则将无法检测到它们。

当所有播种机都已完成(成功与否)时,Flask Seeder将默认向数据库提交所有更改。此行为可以用--no-commit或设置环境变量FLASK_SEEDER_AUTOCOMMIT=0重写。

伪造者和生成器

flask seeder提供了一个Faker类,该类基于真实模型控制伪对象的创建。通过告诉Faker如何创建对象,您可以轻松地创建许多不同的唯一对象,以便在为数据库设定种子时提供帮助。

有不同的生成器可以帮助生成伪对象的值。 当前支持的生成器是:

  • 整数:在两个值之间创建一个随机整数
  • sequence:如果多次调用,则按顺序创建整数
  • 名称:从列表中创建随机名称data/names/names.txt

可以通过子类化Generator来滚动自己的生成器,并实现返回生成值的generate()方法。

示例用法

示例仅显示相关的代码片段

app.py:

fromflaskimportFlaskfromflask_sqlalchemyimportSQLAlchemyfromflask_seederimportFlaskSeedercreate_app():app=Flask(__name__)db=SQLAlchemy()db.init_app(app)seeder=FlaskSeeder()seeder.init_app(app,db)returnapp

seeds/demo.py:

fromflask_seederimportSeeder,Faker,generator# SQLAlchemy database modelclassUser(Base):def__init__(self,id_num=None,name=None,age=None):self.id_num=id_numself.name=nameself.age=agedef__str__(self):return"ID=%d, Name=%s, Age=%d"%(self.id_num,self.name,self.age)# All seeders inherit from SeederclassDemoSeeder(Seeder):# run() will be called by Flask-Seederdefrun(self):# Create a new Faker and tell it how to create User objectsfaker=Faker(cls=User,init={"id_num":generator.Sequence(),"name":generator.Name(),"age":generator.Integer(start=20,end=100)})# Create 5 usersforuserinfaker.create(5):print("Adding user: %s"%user)self.db.session.add(user)

shell

$ flask seed run
Running database seeders
Adding user: ID=1, Name=Fancie, Age=76
Adding user: ID=2, Name=Shela, Age=22
Adding user: ID=3, Name=Jo, Age=33
Adding user: ID=4, Name=Laureen, Age=54
Adding user: ID=5, Name=Tandy, Age=66
DemoSeeder... [OK]
Committing to database!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
virtualbox无法从java移动共享文件夹中的文件   java如何连接Android 4.3.5(GA)的apache HttpClient库?   片段中的java Recyclerview未立即显示警报对话框结果   javac(n,r)计算器程序不工作   java使用BooleanQuery还是编写更多索引?   如何在java中设置y/n循环?   java不兼容的通用通配符捕获   java如何在安卓xml中编写数据绑定时的三元操作条件   java如何使用FileDialog?   java如何创建单元测试来检测是否有人使用错误的编码编辑了文件?   java如何从唯一的字符串生成唯一的int?   java gradletomcatplugin:log4j:WARN找不到记录器的附加程序   java我的动态编程解决方案(Kefa和第一步)在codeforces中有什么问题?   java每天更新两个数据库,使它们都包含相同的有效数据集   java如何检查给定的时间是否在时间限制之间   java在单个json POST上保存父级和子级   java如何获取Solr字段类型