如何通过列名从SQLAlchemy实例获取值?

3 投票
1 回答
3444 浏览
提问于 2025-04-18 02:40

我有一个这样的表格:

class MPTTPages(Base):
    __tablename__ = "mptt_pages"

    parent = None

    id = Column(Integer, primary_key=True)
    left = Column("lft", Integer, nullable=False)
    right = Column("rgt", Integer, nullable=False)

    name = Column(String)
    description = Column(Text)

    visible = Column(Boolean)

    def __repr__(self):
        return "MPTTPages(%s, %d, %d)" % (self.id, self.left, self.right)

我想从名为 MPTTPages 的实例中获取 'lft' 这一列的值。但是这个实例并没有 'lft' 这个属性,只有 'left'。

1 个回答

7

查看这个实例所对应的类,找出属性名称和数据库列之间的对应关系。如果某个列的名字和你要找的名字一致,就可以从这个实例中获取到对应的属性名称。

from sqlalchemy import inspect

def getattr_from_column_name(instance, name, default=Ellipsis):
    for attr, column in inspect(instance.__class__).c.items():
        if column.name == name:
            return getattr(instance, attr)

    if default is Ellipsis:
        raise KeyError
    else:
        return default

撰写回答