Seeding
Almasix includes a simple method of seeding your database with test data using seed classes. All seeders live in database/seeders.
Writing seeders
Section titled “Writing seeders”database/ seeders/ __init__.py database_seeder.py # DatabaseSeeder — default entry point user_seeder.pyalmasix new ships an empty DatabaseSeeder. Override run and call child seeders:
from almasix.orm import Seederfrom database.seeders.user_seeder import UserSeeder
class DatabaseSeeder(Seeder): async def run(self) -> None: await self.call([UserSeeder]) # await self.call_once(UserSeeder) # await self.call_with(UserSeeder, {"count": 10}) # await self.call_silent([UserSeeder])class UserSeeder(Seeder): async def run(self, count: int = 1) -> None: from app.models.user import User
for i in range(count): await User.create(email=f"u{i}@example.com", name=f"User {i}")Seeding with factories
Section titled “Seeding with factories”Writing rows out by hand gets old at the third one. A factory describes the row once and a seeder asks for as many as it wants, pinning only the columns that matter:
from almasix.orm import Seeder
from app.models.post import Postfrom app.models.user import User
class DemoSeeder(Seeder): async def run(self) -> None: ada = await User.factory().create({"email": "ada@almasix.dev", "name": "Ada"}) await Post.factory().count(3).for_(ada, "author").create() await User.factory().count(10).has(Post.factory().count(2), "posts").create()Suppressing model events
Section titled “Suppressing model events”from almasix.orm import Seeder, WithoutModelEvents
class QuietSeeder(WithoutModelEvents, Seeder): async def run(self) -> None: await User.create(email="quiet@example.com", name="Quiet")You may also wrap a block with without_model_events().
Running seeders
Section titled “Running seeders”python smith make:seeder UserSeederpython smith db:seedpython smith db:seed --class UserSeederpython smith migrate --seedpython smith migrate --seed --seeder UserSeederpython smith migrate:fresh --seed--seeder implies seeding (you may omit --seed when --seeder is set). The default class is DatabaseSeeder.