Simplified database lifecycle and session management based on SQLModel / SQLAlchemy.
Any contributions are welcome! But we only accept pull requests that come with tests.
pip install database-setup-tools- Database creation on app startup
- Thread-safe database session manager
- Opinionated towards SQLModelbut feasible with any other framework or puresqlalchemy
- Easily use a local database in your tests
In order to use this library, you need some SQLModel or SQLAlchemy tables and a URI to connect to your database.
With this in place, the DatabaseSetup instance can be created - which contains all provided tools and also automatically
creates the database including all tables.
from sqlmodel import Field, SQLModel
from database_setup_tools import DatabaseSetup
class User(SQLModel, table=True):
    """ User database entity / table """
    id: int = Field(index=True, primary_key=True)
    name: str
# create database & tables, establish connection with session pool
database_setup = DatabaseSetup(
    model_metadata = SQLModel.metadata,
    database_uri="postgresql+psycopg2://postgres:postgres@localhost:5432/database",
)Note: The
DatabaseSetupclass acts as singleton, so if you create multiple instances with the same set of parameters, you will always get the same instance back instead of creating a new one.
After the setup is created, you can get a scoped session via the provided session manager and use it for database transactions.
# get scoped session
session = next(database_setup.session_manager.get_session())
# do stuff in session
user = User(name="Alice")
session.add(user)
session.commit()The DatabaseSetup instance also provides lifecycle methods allowing to manually control the database:
database_setup.create_database()
database_setup.drop_database()- Spin up databases for local integration tests: docker-compose -f tests/docker-compose.yaml up -d
- Create virtual environment & install dependencies: poetry install
- Run tests: poetry run pytest