SQLAlchemy对ORM类/对象的内省

时间:2010-05-06 22:36:48

标签: 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)

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

1 个答案:

答案 0 :(得分:11)

类似的东西:

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用户正在编写需要该功能的系统   检查映射类的属性,包括能够   获取主键列,对象关系,plain   属性等等,通常用于构建目的   数据编组系统,如JSON / XML转换方案和   课程形式丰富的图书馆。

     

最初,表格和柱子模型是原始检查   积分,有一个记录良好的系统。而SQLAlchemy ORM   模型也完全内省,这从来就不是一个完整的   稳定和支持的功能,用户往往没有明确   想法如何获取这些信息。

     

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

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