代码之家  ›  专栏  ›  技术社区  ›  Adam Batkin

对ORM类/对象的SQLAlchemy自省

  •  5
  • Adam Batkin  · 技术社区  · 14 年前

    我正在寻找一种方法来内省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 '字段是日期时间,不能为空。

    1 回复  |  直到 12 年前
        1
  •  11
  •   codeape    12 年前

    类似:

    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转换方案和 大量的课程形式图书馆。

    最初,表和柱模型是最初的检查 点,有一个良好的文件系统。当SQLAlchemy ORM 模型也完全反省,这从来没有一个完全 稳定和支持的功能,用户往往不清楚 了解如何获取这些信息。

    0.8有一个计划,为实现这一目的,生产一个一致、稳定和完整记录的API,这将提供一个检查系统 也可以处理类、实例和其他可能的事情。同时 该系统的许多要素已经可用,计划是 锁定API,包括各种访问器 对象作为映射器、实例状态和映射器属性:

    (有关详细信息,请访问链接)