This commit is contained in:
咕谷酱
2025-08-22 00:07:19 +08:00
parent bade8658ed
commit 80d4237c5d
22 changed files with 423 additions and 356 deletions

View File

@@ -2,13 +2,16 @@
数据库字段类型工具
提供处理数据库和 Pydantic 之间类型转换的工具
"""
from typing import Any, Union
from typing import Any
from pydantic import field_validator
from sqlalchemy import Boolean
def bool_field_validator(field_name: str):
"""为特定布尔字段创建验证器,处理数据库中的 0/1 整数"""
@field_validator(field_name, mode="before")
@classmethod
def validate_bool_field(cls, v: Any) -> bool:
@@ -16,20 +19,21 @@ def bool_field_validator(field_name: str):
if isinstance(v, int):
return bool(v)
return v
return validate_bool_field
def create_bool_field(**kwargs):
"""创建一个带有正确 SQLAlchemy 列定义的布尔字段"""
from sqlmodel import Field, Column
from sqlmodel import Column, Field
# 如果没有指定 sa_column则使用 Boolean 类型
if 'sa_column' not in kwargs:
if "sa_column" not in kwargs:
# 处理 index 参数
index = kwargs.pop('index', False)
index = kwargs.pop("index", False)
if index:
kwargs['sa_column'] = Column(Boolean, index=True)
kwargs["sa_column"] = Column(Boolean, index=True)
else:
kwargs['sa_column'] = Column(Boolean)
kwargs["sa_column"] = Column(Boolean)
return Field(**kwargs)