将属性值添加到SQLAlchemy中的列名称字典中

时间:2015-07-31 18:31:05

标签: python flask sqlalchemy

我有一个自定义方法,用于在Flask中将SQLAlchemy对象作为字典返回:

class Script(db.Model):
__tablename__ = "script"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(144), index=True)
audio_filename = db.Column(db.String(144))


@property
def audio_file_path(self):
    return os.path.join(app.config['UPLOAD_FOLDER'], 'voices/', self.audio_filename)

def as_dict(self):
    return {c.name: getattr(self, c.name) for c in self.__table__.columns}

这适用于列字段,但我还想包含模型属性的返回值。

我的问题是,在字典中返回@property audio_file_path def as_dict(self): d = {c.name: getattr(self, c.name) for c in self.__table__.columns} d['audio_file_path'] = self.audio_file_path return d 值的最pythonic方法是什么。

我知道这有效:

{{1}}

但它不是很漂亮。

1 个答案:

答案 0 :(得分:3)

如果您使用property装饰器的多个属性,则可以使用vars遍历该类并检查该项是否为property

def as_dict(self):

    props = {k: getattr(self, k) for (k, v) in vars(self.__class__).items() 
             if type(v) is property}

    columns = {c.name: getattr(self, c.name) for c in self.__table__.columns}
    columns.update(**props)

    return columns