SQLAlchemy 对 ORM 类/对象的自省
我想找到一种方法,可以查看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 个回答
11
类似这样的内容:
table = User.__table__
field = table.c["fullname"]
print "Type", field.type
print "Length", field.type.length
print "Nullable", field.nullable
编辑:
即将发布的0.8版本有一个新类检查系统:
新类检查系统
状态:已完成,待文档
很多使用SQLAlchemy的用户正在开发需要检查映射类属性的系统,这包括获取主键列、对象关系、普通属性等等,通常是为了构建数据转换系统,比如JSON/XML转换方案,以及各种表单库。
最开始,表和列模型是检查的主要点,这个系统有很好的文档支持。虽然SQLAlchemy的ORM模型也可以完全检查,但这一直不是一个稳定和被广泛支持的功能,用户往往不清楚如何获取这些信息。
0.8版本计划提供一个一致、稳定且有完整文档的API,目的是提供一个可以检查类、实例,甚至可能是其他东西的系统。虽然这个系统的很多元素已经可以使用,但计划是锁定API,包括从Mapper、InstanceState和MapperProperty等对象中获取的各种访问器:
(更多信息请查看链接)