【问题标题】:SQLAlchemy introspection of ORM classes/objectsORM 类/对象的 SQLAlchemy 自省
【发布时间】:2012-06-19 01:59:58
【问题描述】:

我正在寻找一种方法来自省 SQLAlchemy ORM 类/实体以确定实体属性的类型和其他约束(如最大长度)。

例如,如果我有一个声明类:

class User(Base):
    __tablename__ = "USER_TABLE"

    id = sa.Column(sa.types.Integer, primary_key=True)
    fullname = sa.Column(sa.types.String(100))
    username = sa.Column(sa.types.String(20), nullable=False)
    password = sa.Column(sa.types.String(20), nullable=False)
    created_timestamp = sa.Column(sa.types.DateTime, nullable=False)

我希望能够发现“fullname”字段应该是一个最大长度为 100 的字符串,并且可以为空。而“created_timestamp”字段是一个日期时间,不能为空。

【问题讨论】:

    标签: python sqlalchemy introspection


    【解决方案1】:

    类似:

    table = User.__table__
    field = table.c["fullname"]
    print "Type", field.type
    print "Length", field.type.length
    print "Nullable", field.nullable
    

    编辑:

    即将发布的 0.8 版本有一个New Class Inspection System

    新的班级检查系统

    状态:已完成,需要文档

    许多 SQLAlchemy 用户正在编写需要该能力的系统 检查映射类的属性,包括能够 获取主键列、对象关系、普通 属性等,通常用于构建 数据编组系统,如 JSON/XML 转换方案和 课程形式库丰富。

    最初,Table 和 Column 模型是原始检查 点,有一个有据可查的系统。而 SQLAlchemy ORM 模型也是完全自省的,这从来都不是完全自省的 稳定且受支持的功能,用户往往不清楚 了解如何获取这些信息。

    0.8 计划为此目的生成一致、稳定和完整记录的 API,这将提供一个检查系统, 适用于类、实例以及可能的其他事物。尽管 该系统的许多元素已经可用,计划是 锁定 API,包括各种可用的访问器 对象为 Mapper、InstanceState 和 MapperProperty:

    (点击链接了解更多信息)

    【讨论】:

    • 我在declarative 上花费了太多时间,以至于我忘记了查看底层列。谢谢!
    猜你喜欢
    • 2011-03-23
    • 2020-05-16
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2012-07-22
    • 2013-10-12
    • 2022-01-20
    • 2014-06-02
    相关资源
    最近更新 更多