From d16382c90c69ee6e18a8026c9629c5a81bfb1365 Mon Sep 17 00:00:00 2001 From: ktianc Date: Fri, 5 Jan 2024 11:35:09 +0800 Subject: [PATCH] =?UTF-8?q?ORM=20=E6=A8=A1=E5=9E=8B=E5=9F=BA=E7=B1=BB?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E5=AD=97=E6=AE=B5=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kinit-api/db/db_base.py | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/kinit-api/db/db_base.py b/kinit-api/db/db_base.py index 086ecd2..542e9a4 100644 --- a/kinit-api/db/db_base.py +++ b/kinit-api/db/db_base.py @@ -8,7 +8,7 @@ from datetime import datetime from sqlalchemy.orm import Mapped, mapped_column from core.database import Base -from sqlalchemy import DateTime, Integer, func, Boolean +from sqlalchemy import DateTime, Integer, func, Boolean, inspect # 使用命令:alembic init alembic 初始化迁移数据库环境 @@ -29,3 +29,40 @@ class BaseModel(Base): ) delete_datetime: Mapped[datetime | None] = mapped_column(DateTime, nullable=True, comment='删除时间') is_delete: Mapped[bool] = mapped_column(Boolean, default=False, comment="是否软删除") + + @classmethod + def get_column_attrs(cls) -> list: + """ + 获取模型中除 relationships 外的所有字段名称 + :return: + """ + mapper = inspect(cls) + + # for attr_name, column_property in mapper.column_attrs.items(): + # # 假设它是单列属性 + # column = column_property.columns[0] + # # 访问各种属性 + # print(f"属性: {attr_name}") + # print(f"类型: {column.type}") + # print(f"默认值: {column.default}") + # print(f"服务器默认值: {column.server_default}") + + return mapper.column_attrs.keys() + + @classmethod + def get_attrs(cls) -> list: + """ + 获取模型所有字段名称 + :return: + """ + mapper = inspect(cls) + return mapper.attrs.keys() + + @classmethod + def get_relationships_attrs(cls) -> list: + """ + 获取模型中 relationships 所有字段名称 + :return: + """ + mapper = inspect(cls) + return mapper.relationships.keys()