我正在寻找一种方法来反省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,不可为空。
答案 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:
(点击链接了解更多信息)