Source code for sqlatypemodel.util.sqlalchemy
"""SQLAlchemy engine creation helpers with optimized JSON serializers.
This module provides wrappers around `sqlalchemy.create_engine` and
`sqlalchemy.ext.asyncio.create_async_engine` that automatically configure
`orjson` (if available) as the default JSON serializer and deserializer.
"""
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from sqlalchemy import Engine
from sqlalchemy import create_engine as sa_create_engine
from sqlalchemy.ext.asyncio import AsyncEngine
from sqlalchemy.ext.asyncio import (
create_async_engine as sa_create_async_engine,
)
from .json import get_serializers
__all__ = ("create_engine", "create_async_engine")
if TYPE_CHECKING:
create_engine = sa_create_engine
create_async_engine = sa_create_async_engine
else:
[docs]
def create_engine(*args: Any, **kwargs: Any) -> Engine:
"""Create a synchronous SQLAlchemy engine with optimized JSON
serializers.
This function wraps `sqlalchemy.create_engine` and injects `orjson`
(via `get_serializers`) into `json_serializer` and `json_deserializer`
arguments if they are not already provided.
Args:
*args: Positional arguments passed to `sqlalchemy.create_engine`.
**kwargs: Keyword arguments passed to `sqlalchemy.create_engine`.
Returns:
An instance of `sqlalchemy.Engine`.
"""
dumps, loads = get_serializers()
kwargs.setdefault("json_serializer", dumps)
kwargs.setdefault("json_deserializer", loads)
return sa_create_engine(*args, **kwargs)
[docs]
def create_async_engine(*args: Any, **kwargs: Any) -> AsyncEngine:
"""Create an asynchronous SQLAlchemy engine with optimized JSON
serializers.
This function wraps `sqlalchemy.ext.asyncio.create_async_engine` and
injects `orjson` (via `get_serializers`) into `json_serializer` and
`json_deserializer` arguments if they are not already provided.
Args:
*args: Positional arguments passed to
`sqlalchemy.create_async_engine`.
**kwargs: Keyword arguments passed to
`sqlalchemy.create_async_engine`.
Returns:
An instance of `sqlalchemy.ext.asyncio.AsyncEngine`.
"""
dumps, loads = get_serializers()
kwargs.setdefault("json_serializer", dumps)
kwargs.setdefault("json_deserializer", loads)
return sa_create_async_engine(*args, **kwargs)