主键
通过主键更新单条记录
update_model
from pydantic import BaseModel
from sqlalchemy_crud_plus import CRUDPlus
from sqlalchemy import Mapped, mapped_column
from sqlalchemy import DeclarativeBase as Base
from sqlalchemy.ext.asyncio import AsyncSession
class ModelIns(Base):
# define your primary_key
primary_key: Mapped[int] = mapped_column(primary_key=True, index=True, autoincrement=True)
class UpdateIns(BaseModel):
# your pydantic schema
pass
class CRUDIns(CRUDPlus[ModelIns]):
async def create(self, db: AsyncSession, pk: int, obj: UpdateIns) -> int:
return await self.update_model(db, pk, obj)
API¶
async def update_model(
self,
session: AsyncSession,
pk: int,
obj: UpdateSchema | dict[str, Any],
flush: bool = False,
commit: bool = False,
**kwargs,
) -> int:
Parameters:
Name | Type | Description | Default |
---|---|---|---|
session | AsyncSession | 数据库会话 | 必填 |
pk | int | 主键 | 必填 |
obj | TypeVar |dict[str, Any] |
更新数据参数 | 必填 |
flush | bool | 冲洗 | False |
commit | bool | 提交 | False |
**kwargs
除了必须传入 obj schema 外,还可以通过关键字入参,传入非 schema 参数,比如,对于某些特定场景,其中一个字段并不是通用的,也不需要进行输入控制,只需在写入时赋予指定值,那么你可以使用关键字入参即可
e.g.
async def update(self, obj: UpdateIns) -> None:
async with async_db_session.begin() as db:
await self.update_model(db, obj, status=1) # (1)
- 在数据被最终写入前,所有入参(schema 和关键字参数)都会赋值给 SQLAlchemy 模型,即便你传入了非模型数据, 这也是安全的,因为它不会被模型所引用
Returns:
Type | Description |
---|---|
int | 更新数量 |