SQLAlchemy对ORM类/对象的内省

Ada*_*kin 5 python sqlalchemy introspection

我正在寻找一种方法来反省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)
Run Code Online (Sandbox Code Playgroud)

我希望能够发现' fullname'字段应该是一个最大长度为100的字符串,并且可以为空.' created_timestamp'字段是DateTime,不可为空.

cod*_*ape 11

就像是:

table = User.__table__
field = table.c["fullname"]
print "Type", field.type
print "Length", field.type.length
print "Nullable", field.nullable
Run Code Online (Sandbox Code Playgroud)

编辑:

即将推出的0.8版本有一个新的类检测系统:

新的班级检查系统

状态:已完成,需要文档

许多SQLAlchemy用户正在编写需要能够检查映射类的属性的系统,包括能够获取主键列,对象关系,普通属性等,通常用于构建数据编组的目的系统,如JSON/XML转换方案,当然也形成了丰富的库.

最初,表格和柱子模型是原始检查点,具有良好记录的系统.虽然SQLAlchemy ORM模型也完全内省,但这从来就不是一个完全稳定和受支持的功能,用户往往不清楚如何获取这些信息.

0.8计划为此目的生成一致,稳定且完整记录的API,这将提供一个对类,实例和可能的其他东西起作用的检查系统.虽然该系统的许多元素已经可用,但计划是锁定API,包括可从Mapper,InstanceState和MapperProperty等对象获得的各种访问器:

(点击链接获取更多信息)