数据库填充
填充
Seeding 是一个方便的途径进行快速填充,或者把数据放到表中。
创建填充
你可以创建一个填充文件和填充类,用于保存填充信息,并在之后运行。
运行以下命令创建一个 seed :
$ masonite-orm seed User
这将会为你的填充创建一些模板:
from masoniteorm.seeds import Seeder
class UserTableSeeder(Seeder):
def run(self):
"""Run the database seeds."""
pass
现在开始,可以开始创建你的填充。
创建你的填充
一个简单的填充可以是创建一个指定的用户用于测试。
from masoniteorm.seeds import Seeder
from models import User
class UserTableSeeder(Seeder):
def run(self):
"""Run the database seeds."""
User.create({
"username": "Joe",
"email": "joe@masoniteproject.com",
"password": "secret"
})
运行填充
方便地运行填充:
$ masonite-orm seed:run User
数据库填充器
工厂
工厂是个简单和方便的方式,进行快速生成大量的数据。你可以把所有工厂放到一个文件中。
创建一个工厂方法
工厂方法是一个使用 Faker
实例的简单的方法。
# config/factories.py
def user_factory(faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
在这个文件中,可以查看 faker
变量能够使用哪些方法。 Faker
注册工厂
创建完之后,可以在 Factory
类中注册方法:
# config/factories.py
from masoniteorm import Factory
from models import User
def user_factory(faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
Factory.register(User, user_factory)
命名工厂
如果有需要,也可以命名工厂,在不同的用例使用不同的工厂:
# config/factories.py
from masoniteorm import Factory
from models import User
def user_factory(faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
def admin_user_factory(faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret',
'is_admin': 1
}
Factory.register(User, user_factory)
Factory.register(User, admin_user_factory, name="admin_users")
调用工厂
为了使用工厂,可以从建立的工厂中导入 Factory
类。在本例中,是在 config/factories.py
文件:
from config.factories import Factory
from models import User
users = Factory(User, 50).create() #== <masoniteorm.collections.Collection object>
user = Factory(User).create() #== <models.User object>
这将会把这些用户持久化到数据库中。如果你想创建一个模型或者集合 (并不持久化它们),可以使用 make
方法:
from config.factories import Factory
from models import User
users = Factory(User, 50).make() #== <masoniteorm.collections.Collection object>
user = Factory(User).make() #== <models.User object>
再次说明,这并不会把值持久化到数据库。
调用命名的工厂
默认, Masonite 将会使用没有命名的工厂。如果你命名了一些工厂,可以方便地调用它们:
from config.factories import Factory
from models import User
users = Factory(User, 50).create(name="admin_users") #== <masoniteorm.collections.Collection object>
创建之后
可以指定第二个工厂,在模型创建之后运行:
# config/factories.py
from masoniteorm import Factory
from models import User
def user_factory(faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
def after_users(model, faker):
model.verified = True
Factory.register(User, user_factory)
Factory.after_creating(User, after_users)
现在,当你创建一个用户时,将会把用户传递到这个 after_creating
方法:
user = factory(User).create()
user.verified #== True
修改工厂的值
在之前创建的工厂中,如果想修改任何值,可以向 create
或者 make
方法传递一个字典:
from config.factories import Factory
from models import User
users = Factory(User, 50).create({'email': 'john@masoniteproject.com'}) #== <masoniteorm.collections.Collection object>
这是个好方法,确保固定的值,用于之后进行测试断言。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。