SQLAlchemy 对 ORM 类/对象的自省

5 投票
1 回答
2203 浏览
提问于 2025-04-15 22:26

我想找到一种方法,可以查看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等对象中获取的各种访问器:

(更多信息请查看链接)

撰写回答