Generate realistic test data for your databases. Schema-aware, relationship-preserving, privacy-safe.
Project description
Seedbase
Generate realistic, relationship-preserving, privacy-safe test data for your databases, and pull it straight into your local or CI database.
Seedbase lives on seedba.se: you model (or import) a schema there, generate datasets, and use this package to pull them into Postgres, MySQL, SQLite and more. Schema-aware, foreign-key-correct, reproducible by seed.
Create a free account at seedba.se/register, no credit card. The free tier is enough to generate full, foreign-key-consistent datasets.
Install
pip install seedbase
Zero dependencies, pure Python (3.10+).
CLI quickstart
seedbase login # opens the browser, stores a token
seedbase init # creates .seedbase.json (project + target DB)
seedbase generate --seed 42 # trigger a generation on the platform
seedbase pull all # write schema + data into your target DB
The CLI is pull-oriented: schema and datasets live on the platform, you pull them into your database. Other commands: projects, generations, connections, pull schema|data|subset, mask, db-push, diff, export config, import config.
Python SDK
from seedbase import SeedbaseClient
client = SeedbaseClient(token="dr_sk_...") # or from ~/.seedbase/config.json
gen = client.generate(project_id, seed=42, wait=True)
data = client.download(gen["id"], fmt="sql")
pytest fixtures
Seedbase ships a pytest plugin, so realistic, foreign-key-consistent test data is one fixture away. pytest fixtures are dependency injection, so this is your test data, injected.
Inject a populated test database (the headline). The target database needs its schema already migrated; SeedBase fills it with FK-consistent data and cleans up after the session. Needs SQLAlchemy 2.0 (pip install "seedbase[database]"):
import sqlalchemy
def test_pagination(seeded_database):
# seeded_database is a live connection to a DB full of realistic data
rows = seeded_database.execute(
sqlalchemy.text("SELECT email FROM users LIMIT 5")
).fetchall()
assert all("@" in email for (email,) in rows)
Inject the rows directly (no database, no driver):
def test_user_shape(seeded_rows):
# {table_name: [row_dict, ...]}, in foreign-key-safe order
assert seeded_rows["users"][0]["email"]
Raw bytes (SQL/CSV/JSON dump) if you want to load it yourself:
def test_dump(seeded_data):
assert seeded_data
Deterministic per seed, so the same seed gives the same data and your tests are reproducible. Configure via env (SEEDBASE_TOKEN, SEEDBASE_PROJECT, SEEDBASE_SEED, SEEDBASE_TEST_DATABASE_URL) or pytest.ini (seedbase_project, seedbase_seed, seedbase_rows, seedbase_database_url). All fixtures skip with a helpful message if the project or credentials are missing, so they never break a suite that has not configured them.
Links
- Website: https://seedba.se
- Docs: https://seedba.se/docs
- API keys: https://seedba.se/settings?tab=api-keys
MIT licensed.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file seedbase-0.2.1.tar.gz.
File metadata
- Download URL: seedbase-0.2.1.tar.gz
- Upload date:
- Size: 34.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cea02be2d33da2a09a4f0490119929d71727c156990c813da0950d365401532
|
|
| MD5 |
1313a7e615d2b376874533c180edde83
|
|
| BLAKE2b-256 |
9380cae321ae6c8a57d7574b7c3a9a9b3a2b8c2f9cf5d39c97c01287ae99b117
|
Provenance
The following attestation bundles were made for seedbase-0.2.1.tar.gz:
Publisher:
publish.yml on marcelglaeser/seedbase-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seedbase-0.2.1.tar.gz -
Subject digest:
7cea02be2d33da2a09a4f0490119929d71727c156990c813da0950d365401532 - Sigstore transparency entry: 1911018028
- Sigstore integration time:
-
Permalink:
marcelglaeser/seedbase-python@55c655b3ffdacc7a9367076dfd22be6f7380eae6 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/marcelglaeser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@55c655b3ffdacc7a9367076dfd22be6f7380eae6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file seedbase-0.2.1-py3-none-any.whl.
File metadata
- Download URL: seedbase-0.2.1-py3-none-any.whl
- Upload date:
- Size: 37.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0af14b98886b23cfd92b27096cc6ef3be26ef79bc1710b9310c7bbdd495929a
|
|
| MD5 |
986adb10801f467b13303aff5a4878c1
|
|
| BLAKE2b-256 |
97b578ed4ef7d5bc406734bed255f5b5601709a336e68494838f0aded0e4a081
|
Provenance
The following attestation bundles were made for seedbase-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on marcelglaeser/seedbase-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seedbase-0.2.1-py3-none-any.whl -
Subject digest:
f0af14b98886b23cfd92b27096cc6ef3be26ef79bc1710b9310c7bbdd495929a - Sigstore transparency entry: 1911018166
- Sigstore integration time:
-
Permalink:
marcelglaeser/seedbase-python@55c655b3ffdacc7a9367076dfd22be6f7380eae6 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/marcelglaeser
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@55c655b3ffdacc7a9367076dfd22be6f7380eae6 -
Trigger Event:
push
-
Statement type: