Charles Pereira
06/17/2026, 6:13 PMMarvin
06/17/2026, 6:13 PMMarvin
06/17/2026, 6:15 PMdbt deps, dbt run, dbt test, or dbt build
In Prefect 3.x, the easiest way is with prefect-dbt.
Install:
bash
pip install "prefect[dbt]"
pip install dbt-mysql
Then create a flow that runs your dbt project:
python
from pathlib import Path
from prefect import flow
from prefect_dbt import PrefectDbtRunner, PrefectDbtSettings
@flow
def load_into_mysql():
settings = PrefectDbtSettings(
project_dir=Path("./my_dbt_project"),
profiles_dir=Path("./my_dbt_project"),
)
runner = PrefectDbtRunner(
settings=settings,
raise_on_failure=True,
)
runner.invoke(["deps"])
runner.invoke(["seed"])
runner.invoke(["run"])
runner.invoke(["test"])
if __name__ == "__main__":
load_into_mysql()
Your profiles.yml would contain the MySQL connection for dbt, for example:
yaml
my_dbt_project:
outputs:
dev:
type: mysql
host: "{{ env_var('DBT_MYSQL_HOST') }}"
user: "{{ env_var('DBT_MYSQL_USER') }}"
pass: "{{ env_var('DBT_MYSQL_PASSWORD') }}"
port: 3306
dbname: analytics
threads: 4
keepalives_idle: 0
target: dev
A practical setup is:
- keep your dbt project in git
- store MySQL credentials in environment variables or Prefect-managed secrets
- let Prefect schedule and monitor the dbt run
If you want a scheduled deployment, you can serve it directly:
python
if __name__ == "__main__":
load_into_mysql.serve(
name="dbt-mysql-daily",
cron="0 2 * * *",
)
A few caveats:
- Prefect orchestrates dbt, but dbt itself needs MySQL support via dbt-mysql
- MySQL dbt support is generally less common than Snowflake/BigQuery/Postgres, so test your models carefully
- Some dbt features/adapters are more mature on warehouse platforms than on MySQL
Helpful links:
- Prefect dbt integration docs
- prefect-dbt integration page
- dbt MySQL setup
If you want, I can also give you:
- a full working example with profiles.yml + Prefect flow
- a Docker/Kubernetes deployment example
- or show how to run specific dbt models/tags from Prefect.