2014-04-14 34 views
1

我的表是这样的:如何通过列名从SQLAlchemy实例获取值?

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) 

如何从列名“LFT”实例MPTTPages价值?实例没有属性lft,只剩下。

回答

3

检查实例的映射类以获取属性名称与列的映射。如果列名与您正在查找的名称匹配,请从实例中获取属性名称。

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