docs/v3/how-to-guides/configuration/variables.mdx
To create a variable stored in the Prefect backend, use Variable.set().
from prefect.variables import Variable
Variable.set("answer", 42)
To read a variable, use Variable.get().
from prefect.variables import Variable
Variable.get("answer")
To read a variable with a fallback value, use Variable.get(default=...).
from prefect.variables import Variable
Variable.get("answer", default=42)
To update a variable, use Variable.set(value, overwrite=True).
from prefect.variables import Variable
Variable.set("answer", 42, overwrite=True)
To delete a variable, use Variable.unset().
from prefect.variables import Variable
Variable.unset("answer")
In a sync context (such as an if __name__ == "__main__" block or simple def scope), these methods are used synchronously.
In an async context (such as an async def scope), they are used asynchronously.
</Warning>
from prefect import flow from prefect.variables import Variable
@flow(log_prints=True) def space_mission_sync(mission_name: str): crew = Variable.get("crew_members", default=["Backup1", "Backup2"]) print(f"Launching {mission_name} with crew: {', '.join(crew)}")
if name == "main": Variable.set("crew_members", ["Zaphod", "Arthur", "Trillian"]) space_mission_sync("Mars Expedition")
```python Asynchronous
import asyncio
from prefect import flow
from prefect.variables import Variable
@flow(log_prints=True)
async def space_mission_async(mission_name: str):
crew = await Variable.get("crew_members", default=["Backup1", "Backup2"])
print(f"Launching {mission_name} with crew: {', '.join(crew)}")
if __name__ == "__main__":
Variable.set("crew_members", ["Zaphod", "Arthur", "Trillian"])
asyncio.run(space_mission_async("Mars Expedition"))
prefect.yaml deployment stepsIn prefect.yaml files, variables are expressed as strings wrapped in quotes and double curly brackets:
"{{ prefect.variables.my_variable }}"
Use variables to templatize deployment steps by
referencing them in the prefect.yaml file that creates the deployments.
For example, you can pass in a variable to specify a branch for a git repo in a deployment pull step:
pull:
- prefect.deployments.steps.git_clone:
repository: https://github.com/PrefectHQ/hello-projects.git
branch: "{{ prefect.variables.deployment_branch }}"
The deployment_branch variable is evaluated at runtime for the deployed flow, allowing changes to variables used in a pull action without updating a deployment directly.