Skip to main content

FastAPI-SQLAlchemy

https://github.com/mfreeborn/fastapi-sqlalchemy/workflows/ci/badge.svg https://codecov.io/gh/mfreeborn/fastapi-sqlalchemy/branch/master/graph/badge.svg https://img.shields.io/pypi/v/fastapi_sqlalchemy?color=blue

FastAPI-SQLAlchemy provides a simple integration between FastAPI and SQLAlchemy in your application. It gives access to useful helpers to facilitate the completion of common tasks.

Installing

Install and update using pip:

$ pip install fastapi-sqlalchemy

Examples

Usage inside of a route

from fastapi import FastAPI
from fastapi_sqlalchemy import DBSessionMiddleware  # middleware helper
from fastapi_sqlalchemy import db  # an object to provide global access to a database session

from app.models import User

app = FastAPI()

app.add_middleware(DBSessionMiddleware, db_url="sqlite://")

# once the middleware is applied, any route can then access the database session
# from the global ``db``

@app.get("/users")
def get_users():
    users = db.session.query(User).all()

    return users

Note that the session object provided by db.session is based on the Python3.7+ ContextVar. This means that each session is linked to the individual request context in which it was created.

Usage outside of a route

Sometimes it is useful to be able to access the database outside the context of a request, such as in scheduled tasks which run in the background:

import pytz
from apscheduler.schedulers.asyncio import AsyncIOScheduler  # other schedulers are available
from fastapi import FastAPI
from fastapi_sqlalchemy import db

from app.models import User, UserCount

app = FastAPI()

app.add_middleware(DBSessionMiddleware, db_url="sqlite://")


@app.on_event('startup')
async def startup_event():
    scheduler = AsyncIOScheduler(timezone=pytz.utc)
    scheduler.start()
    scheduler.add_job(count_users_task, "cron", hour=0)  # runs every night at midnight


def count_users_task():
    """Count the number of users in the database and save it into the user_counts table."""

    # we are outside of a request context, therefore we cannot rely on ``DBSessionMiddleware``
    # to create a database session for us. Instead, we can use the same ``db`` object and
    # use it as a context manager, like so:

    with db():
        user_count = db.session.query(User).count()

        db.session.add(UserCount(user_count))
        db.session.commit()

    # no longer able to access a database session once the db() context manager has ended

    return users

Metadata

Release files for FTSQLALCHEMY 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for FTSQLALCHEMY 0.2.1
File Size Uploaded
FTSQLALCHEMY-0.2.1.tar.gz 6.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for FTSQLALCHEMY 0.2.1
File Interpreter ABI Platform
FTSQLALCHEMY-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 11.8 kB

Release files / FTSQLALCHEMY-0.2.1.tar.gz

Download URL FTSQLALCHEMY-0.2.1.tar.gz
Size 6.1 kB
Tags Source
SHA-256 checksum
How to use checksums
1f3016eebd83af277ae696c01d63ab1deaf0897b51fb4697431cac99974ed5d7
BLAKE2b-256 checksum
How to use checksums
a02a9becbd2cf8ea5853ee61d4d6f63e185cf420f8a7d140b81dcd8c9a10d420
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.10.10

Release files / FTSQLALCHEMY-0.2.1-py3-none-any.whl

Download URL FTSQLALCHEMY-0.2.1-py3-none-any.whl
Size 5.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1288413a20c370cfc0678ecbeb0d0055a5c04d12769d51a809565b819cf58d4a
BLAKE2b-256 checksum
How to use checksums
486d5365925219aaf98ba562f8983d42f79ab51abb46b0110cfda9ff0a1c08b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.10.10

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page