44[ ![ CircleCI] ( https://circleci.com/gh/dialoguemd/fastapi-sqla.svg?style=svg&circle-token=998482f269270ee521aa54f2accbee2e22943743 )] ( https://circleci.com/gh/dialoguemd/fastapi-sqla )
55[ ![ codecov] ( https://codecov.io/gh/dialoguemd/fastapi-sqla/branch/master/graph/badge.svg?token=BQHLryClIn )] ( https://codecov.io/gh/dialoguemd/fastapi-sqla )
66
7- A highly opinionated SQLAlchemy extension for FastAPI:
7+ A highly opinionated [ SQLAlchemy] extension for [ FastAPI] :
88
99* Setup using environment variables to connect on DB;
1010* ` fastapi_sqla.Base ` a declarative base class to reflect DB tables at startup;
@@ -49,6 +49,13 @@ class Entity(Base):
4949
5050### Getting an sqla session
5151
52+ #### Using dependency injection
53+
54+ Use [ FastAPI dependency injection] to get a session as a parameter of a path operation
55+ function.
56+ SQLAlchemy session is committed before response is returned or rollbacked if any
57+ exception occurred:
58+
5259``` python
5360from fastapi import APIRouter, Depends
5461from fastapi_sqla import Session
@@ -61,6 +68,30 @@ def example(session: Session = Depends()):
6168 return session.execute(" SELECT now()" ).scalar()
6269```
6370
71+ #### Using a context manager
72+
73+ When needing a session outside of a path operation, like when using
74+ [ FastAPI background tasks] , use ` fastapi_sqla.open_session ` context manager.
75+ SQLAlchemy session is committed when exiting context or rollbacked if any exception
76+ occurred:
77+
78+ ``` python
79+ from fastapi import APIRouter, BackgroundTasks
80+ from fastapi_sqla import open_session
81+
82+ router = APIRouter()
83+
84+
85+ @router.get (" /example" )
86+ def example (bg : BackgroundTasks):
87+ bg.add_task(run_bg)
88+
89+
90+ def run_bg ():
91+ with open_session() as session:
92+ session.execute(" SELECT now()" ).scalar()
93+ ```
94+
6495### Pagination
6596
6697``` python
@@ -87,10 +118,11 @@ def all_users(session: Session = Depends(), paginate: Paginate = Depends()):
87118```
88119
89120By default:
121+
90122* It returns pages of 10 items, up to 100 items;
91123* Total number of items in the collection is queried using [ ` Query.count ` ]
92124
93- ### Custom pagination
125+ #### Customize pagination
94126
95127You can customize:
96128- Minimum and maximum number of items per pages;
@@ -256,3 +288,7 @@ It returns the path of `alembic.ini` configuration file. By default, it returns
256288[ `sqlalchemy.create_engine` ] : https://docs.sqlalchemy.org/en/13/core/engines.html?highlight=create_engine#sqlalchemy.create_engine
257289[ `Query.count` ] : https://docs.sqlalchemy.org/en/13/orm/query.html#sqlalchemy.orm.query.Query.count
258290[ pytest options ] : https://docs.pytest.org/en/stable/reference.html#confval-usefixtures
291+ [ FastAPI ] : https://fastapi.tiangolo.com/
292+ [ FastAPI dependency injection ] : https://fastapi.tiangolo.com/tutorial/dependencies/
293+ [ FastAPI background tasks ] : https://fastapi.tiangolo.com/tutorial/background-tasks/
294+ [ SQLAlchemy ] : http://sqlalchemy.org/
0 commit comments