Skip to content

提交

SQLAlchemy CRUD Plus 内部很多方法都提供了 commit 参数,默认值为 False,它既不会执行提交操作,也不包含 flush 等行为,要想真正写入到数据库,你可以通过以下几种方案

commit=True

这通常适用于手动创建的 session 生成器, SQLAlchemy CRUD Plus 将在内部自动执行提交

from fastapi import FastAPI, Depends

from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine

async_engine = create_async_engine('数据库连接', future=True)
async_db_session = async_sessionmaker(async_engine, autoflush=False, expire_on_commit=False)


async def get_db() -> AsyncSession:
    """
    session 生成器
    """
    session = async_db_session()
    try:
        yield session
    except Exception as se:
        await session.rollback()
        raise se
    finally:
        await session.close()

app = FastAPI()


class CreateIns(BaseModel):
    # your pydantic schema
    pass


@app.post('/api', summary='新增一条数据')
async def create(self, obj: CreateIns, db: AsyncSession = Depends(get_db)) -> None:
    await self.create_model(db, obj, commit=True)

begin()

适用于自动提交,这一切都由 sqlalchemy 在内部完成 ,因此,用户无需重复调用 commit 方法

from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine

async_engine = create_async_engine('数据库连接', future=True)
async_db_session = async_sessionmaker(async_engine, autoflush=False, expire_on_commit=False)


async def create(self, obj: CreateIns) -> None:
    async with async_db_session.begin() as db:
        await self.create_model(db, obj)