return 来自 class 的 NOT NULL 列与 sqlalchemy

return NOT NULL columns from class with sqlalchemy

在 python sqlalchemy 我想获取我的 nullable=False 列 class,包括 JSONB 类型。

这是我的例子class:

class MyClass():
    __tablename__ = 'myclass'
    id = Column("id", primary_key=True)
    name = Column(String, nullable=False)
    body = Column(JSONB, nullable=False)
    irrelevant = Column(String, nullable=True)

使用模块 inspect 我可以获得 MyClass 的成员并应用过滤器:

# list of possible attributes
attr = [a for a in inspect.getmembers(MyClass,lambda :not(inspect.isroutine(a))) if not '__' in  a[0]]

但是无法检查 nullable=False 是否在列中。 最终我想获得列:namebody.

您可以遍历 MyClass.__table__.columns 并获取不可为 null 的列的名称

column_names = [col.name for col in MyClass.__table__.columns if not col.nullable]

然后用getattr

获取属性
attrs = [getattr(MyClass, column_name) for column_name in column_names]