.. _fastapi-sqlalchemy-example: FastAPI + SQLAlchemy example ============================ .. meta:: :keywords: Python,Dependency Injection,FastAPI,SQLAlchemy,Example :description: This example demonstrates a usage of the FastAPI, SQLAlchemy, and Dependency Injector. This example shows how to use ``Dependency Injector`` with `FastAPI <https://fastapi.tiangolo.com/>`_ and `SQLAlchemy <https://www.sqlalchemy.org/>`_. The source code is available on the `Github <https://github.com/ets-labs/python-dependency-injector/tree/master/examples/miniapps/fastapi-sqlalchemy>`_. Thanks to `@ShvetsovYura <https://github.com/ShvetsovYura>`_ for providing initial example: `FastAPI_DI_SqlAlchemy <https://github.com/ShvetsovYura/FastAPI_DI_SqlAlchemy>`_. Application structure --------------------- Application has next structure: .. code-block:: bash ./ ├── webapp/ │ ├── __init__.py │ ├── application.py │ ├── containers.py │ ├── database.py │ ├── endpoints.py │ ├── models.py │ ├── repositories.py │ ├── services.py │ └── tests.py ├── config.yml ├── docker-compose.yml ├── Dockerfile └── requirements.txt Application factory ------------------- Application factory creates container, wires it with the ``endpoints`` module, creates ``FastAPI`` app, and setup routes. Application factory also creates database if it does not exist. Listing of ``webapp/application.py``: .. literalinclude:: ../../examples/miniapps/fastapi-sqlalchemy/webapp/application.py :language: python Endpoints --------- Module ``endpoints`` contains example endpoints. Endpoints have a dependency on user service. User service is injected using :ref:`wiring` feature. See ``webapp/endpoints.py``: .. literalinclude:: ../../examples/miniapps/fastapi-sqlalchemy/webapp/endpoints.py :language: python Container --------- Declarative container wires example user service, user repository, and utility database class. See ``webapp/containers.py``: .. literalinclude:: ../../examples/miniapps/fastapi-sqlalchemy/webapp/containers.py :language: python Services -------- Module ``services`` contains example user service. See ``webapp/services.py``: .. literalinclude:: ../../examples/miniapps/fastapi-sqlalchemy/webapp/services.py :language: python Repositories ------------ Module ``repositories`` contains example user repository. See ``webapp/repositories.py``: .. literalinclude:: ../../examples/miniapps/fastapi-sqlalchemy/webapp/repositories.py :language: python Models ------ Module ``models`` contains example SQLAlchemy user model. See ``webapp/models.py``: .. literalinclude:: ../../examples/miniapps/fastapi-sqlalchemy/webapp/models.py :language: python Database -------- Module ``database`` defines declarative base and utility class with engine and session factory. See ``webapp/database.py``: .. literalinclude:: ../../examples/miniapps/fastapi-sqlalchemy/webapp/database.py :language: python Tests ----- Tests use :ref:`provider-overriding` feature to replace repository with a mock. See ``webapp/tests.py``: .. literalinclude:: ../../examples/miniapps/fastapi-sqlalchemy/webapp/tests.py :language: python :emphasize-lines: 25, 45, 58, 74, 86, 97 Sources ------- The source code is available on the `Github <https://github.com/ets-labs/python-dependency-injector/tree/master/examples/miniapps/fastapi-sqlalchemy>`_. .. disqus::