23
loading...
This website collects cookies to deliver better user experience
project1
├── app.db
├── oratordemo
│ ├── database.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.p
│ └── models
│ └── __init__.py
├── poetry.lock
└── pyproject.toml
project1
├── app.db
├── oratordemo
│ ├── __init__.py
│ ├── database.py
│ ├── config
│ │ └── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models
│ │ └── __init__.py
│ └── seeds
│ └── __init__.py
├── poetry.lock
└── pyproject.toml
(porject1) ~/project1/oratordemo> orator make:seed user_table_seeder
database_seeder created successfully.
user_table_seeder created successfully.
from orator.seeds import Seeder
class UserTableSeeder(Seeder):
def run(self):
"""
Run the database seeds.
"""
pass
run()
函式,這個函式就是在跑 seeding 時會被呼叫的函式,函式內放的就是建立 User 資料的敘述,但架構上我們會把實際產生假資料的邏輯抽離,在這邊我們引入 model factory 的概念,顧名思義,model factory 就是實際產生假資料的「工廠」,而 xxx_seeder.py 則負責向工廠下單。from orator.orm import Factory
from oratordemo.models.user import User
factory = Factory()
@factory.define(User)
def users_factory(faker):
return {
'name': faker.name(),
'age': faker.random_int(min=1, max=115),
'birthday': faker.date_of_birth(minimum_age=0, maximum_age=115).strftime('%Y-%m-%d')
}
from orator.seeds import Seeder
from oratordemo.config.factories import factory
from oratordemo.models.user import User
class UserTableSeeder(Seeder):
factory = factory
def run(self):
"""
Run the database seeds.
"""
self.factory(User, 50).create()
(project1) ~/project1> env PYTHONPATH='/home/leon/project1' orator db:seed --config=oratordemo/database.py --path=oratordemo/seeds/ --seeder=user_table_seeder
Are you sure you want to seed the database?: (yes/no) [no] yes
Database seeded!
import
敘述會引發 ModuleNotFoundError
這個問題,因此必須多加一個環境變數讓 Python 能找到我們要 import 的模組。call()
敘述來加入要跑的 seeder 們:from orator.seeds import Seeder
from oratordemo.seeds.user_table_seeder import UserTableSeeder
class DatabaseSeeder(Seeder):
def run(self):
"""
Run the database seeds.
"""
self.call(UserTableSeeder)
(project1) ~/project1> env PYTHONPATH='/home/leon/project1' orator db:seed --config=oratordemo/database.py --path=oratordemo/seeds/
Are you sure you want to seed the database?: (yes/no) [no] yes
Seeded: UserTableSeeder
Database seeded!