提交
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)