mirror of
https://github.com/grillazz/fastapi-sqlalchemy-asyncpg.git
synced 2025-11-30 13:20:40 +03:00
- add decorator to compile sql for pool or return scalar from statement
This commit is contained in:
@@ -9,6 +9,20 @@ from sqlalchemy.orm import mapped_column, Mapped, relationship, joinedload
|
||||
from app.models.base import Base
|
||||
from app.models.nonsense import Nonsense
|
||||
|
||||
from functools import wraps
|
||||
|
||||
|
||||
def compile_sql_or_scalar(func):
|
||||
@wraps(func)
|
||||
async def wrapper(cls, db_session, name, compile_sql=False, *args, **kwargs):
|
||||
stmt = await func(cls, db_session, name, *args, **kwargs)
|
||||
if compile_sql:
|
||||
return stmt.compile(compile_kwargs={"literal_binds": True})
|
||||
result = await db_session.execute(stmt)
|
||||
return result.scalars().first()
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
class Stuff(Base):
|
||||
__tablename__ = "stuff"
|
||||
@@ -24,12 +38,10 @@ class Stuff(Base):
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def find(cls, db_session: AsyncSession, name: str, compile_sql: bool = False):
|
||||
@compile_sql_or_scalar
|
||||
async def find(cls, db_session: AsyncSession, name: str, compile_sql=False):
|
||||
stmt = select(cls).options(joinedload(cls.nonsense)).where(cls.name == name)
|
||||
if compile_sql:
|
||||
return stmt.compile(compile_kwargs={"literal_binds": True})
|
||||
result = await db_session.execute(stmt)
|
||||
return result.scalars().first()
|
||||
return stmt
|
||||
|
||||
|
||||
class StuffFullOfNonsense(Base):
|
||||
|
||||
Reference in New Issue
Block a user