Skip to content

Databases

First, we'll go over basics and examine the Database class. Then, we'll start to build our example. You can also skip ahead to the example.

The Database class

You can import Database like so:

from dbdeclare.entities import Database

Database is a representation of a Postgres database. It is a cluster-wide entity. This means each database in your cluster must have a unique name. The __init__ args correspond to the SQL CREATE DATABASE arguments found in the Postgres documentation.

Take a look at the class docstrings for more detail, like an explanation of the __init__ args, the various methods defined, what classes it inherits from, and more.

Example

Let's start building our example. We need a database for each stage, so let's create a function that takes a stage (like dev or prod) as input and declares a database with it:

from dbdeclare.entities import Database


def declare_stage(stage: str) -> None:
    Database(name=stage)

This imports the Database class, defines a function declare_stage that accepts a string name of a stage, and declares a Database with the stage as the name. Now let's define a main function that creates all three stages we want to create:

from dbdeclare.entities import Database


def declare_stage(stage: str) -> None:
    Database(name=stage)


def main() -> None:
    stages = ["test", "dev", "prod"]
    for stage in stages:
        declare_stage(stage)

Here, we add a main function with no inputs, define a list of desired stages, loop over them, and run the declare_stage function for each stage.

You can run the entire file:

from dbdeclare.entities import Database


def declare_stage(stage: str) -> None:
    Database(name=stage)


def main() -> None:
    stages = ["test", "dev", "prod"]
    for stage in stages:
        declare_stage(stage)


if __name__ == "__main__":
    main()

This declares all three databases. Excellent! Note that we haven't created anything in our cluster yet, we have only declared our databases in code. We'll get to creation, but first let's add some roles.