Tortoise-ORM FastAPI integration¶
We have a lightweight integration util tortoise.contrib.fastapi
which has a class RegisterTortoise
that can be used to set/clean up Tortoise-ORM in lifespan context.
FastAPI is basically Starlette & Pydantic, but in a very specific way.
See the FastAPI Examples & have a look at the Pydantic serialisation tutorials.
Reference¶
-
class tortoise.contrib.fastapi.RegisterTortoise(app=
None
, config=None
, config_file=None
, db_url=None
, modules=None
, generate_schemas=False
, add_exception_handlers=False
, use_tz=False
, timezone='UTC'
, _create_db=False
)[source]¶ Bases:
AbstractAsyncContextManager
Registers Tortoise-ORM with set-up and tear-down inside a FastAPI application’s lifespan.
You can configure using only one of
config
,config_file
and(db_url, modules)
.- Parameters:¶
- app : FastAPI | None¶
FastAPI app.
- config : dict | None¶
Dict containing config:
Example
{ 'connections': { # Dict format for connection 'default': { 'engine': 'tortoise.backends.asyncpg', 'credentials': { 'host': 'localhost', 'port': '5432', 'user': 'tortoise', 'password': 'qwerty123', 'database': 'test', } }, # Using a DB_URL string 'default': 'postgres://postgres:qwerty123@localhost:5432/events' }, 'apps': { 'models': { 'models': ['__main__'], # If no default_connection specified, defaults to 'default' 'default_connection': 'default', } } }
- config_file : str | None¶
Path to .json or .yml (if PyYAML installed) file containing config with same format as above.
- db_url : str | None¶
Use a DB_URL string. See DB_URL
- modules : dict[str, Iterable[str | ModuleType]] | None¶
Dictionary of
key
: [list_of_modules
] that defined “apps” and modules that should be discovered for models.- generate_schemas : bool¶
True to generate schema immediately. Only useful for dev environments or SQLite
:memory:
databases- add_exception_handlers : bool¶
True to add some automatic exception handlers for
DoesNotExist
&IntegrityError
. This is not recommended for production systems as it may leak data.- use_tz : bool¶
A boolean that specifies if datetime will be timezone-aware by default or not.
- timezone : str¶
Timezone to use, default is UTC.
- Raises:¶
ConfigurationError – For any configuration error
-
tortoise.contrib.fastapi.register_tortoise(app, config=
None
, config_file=None
, db_url=None
, modules=None
, generate_schemas=False
, add_exception_handlers=False
)[source]¶ Registers Tortoise-ORM with set-up at the beginning of FastAPI application’s lifespan (which allow user to read/write data from/to db inside the lifespan function), and tear-down at the end of that lifespan.
You can configure using only one of
config
,config_file
and(db_url, modules)
.- Parameters:¶
- app : FastAPI¶
FastAPI app.
- config : dict | None¶
Dict containing config:
Example
{ 'connections': { # Dict format for connection 'default': { 'engine': 'tortoise.backends.asyncpg', 'credentials': { 'host': 'localhost', 'port': '5432', 'user': 'tortoise', 'password': 'qwerty123', 'database': 'test', } }, # Using a DB_URL string 'default': 'postgres://postgres:qwerty123@localhost:5432/events' }, 'apps': { 'models': { 'models': ['__main__'], # If no default_connection specified, defaults to 'default' 'default_connection': 'default', } } }
- config_file : str | None¶
Path to .json or .yml (if PyYAML installed) file containing config with same format as above.
- db_url : str | None¶
Use a DB_URL string. See DB_URL
- modules : dict[str, Iterable[str | ModuleType]] | None¶
Dictionary of
key
: [list_of_modules
] that defined “apps” and modules that should be discovered for models.- generate_schemas : bool¶
True to generate schema immediately. Only useful for dev environments or SQLite
:memory:
databases- add_exception_handlers : bool¶
True to add some automatic exception handlers for
DoesNotExist
&IntegrityError
. This is not recommended for production systems as it may leak data.
- Raises:¶
ConfigurationError – For any configuration error
- Return type:¶
None