2014-04-14 35 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