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
SQLModel
but 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
DatabaseSetup
class 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