Seeding

Seeder vs. HybridSeeder

Features & Options

Seeder

HybridSeeder

Support model and data keys

✔️

✔️

Support model and filter keys

✔️

Optional argument add_to_session=False in the seed method

✔️

When to use HybridSeeder and ‘filter’ key field?

Assuming that Child(age=5) exists in the database or session, then we should use filter instead of data key.

The values from filter will query from the database or session, and get the result then assign it to the Parent.child

from sqlalchemyseed import HybridSeeder
from db import session

data = {
    "model": "models.Parent",
    "data": {
        "!child": { # '!' is the reference prefix
            "model": "models.Child",
            "filter": {
                "age": 5
            }
        }
    }
}

# When seeding instances that has 'filter' key,
# then use HybridSeeder, otherwise use Seeder.
seeder = HybridSeeder(session, ref_prefix='!')
seeder.seed(data)

session.commit()  # or seeder.sesssion.commit()

Note

filter key is dependent to HybridSeeder in order to perform correctly.