SQLAlchemy辅助表可以是db.Model实例吗?

时间:2014-01-30 18:02:36

标签: python sqlalchemy flask-sqlalchemy

我正在开发一个Flask-SQLAlchemy项目,我已经实现了一个适用于我的SQLAlchemy模型的漂亮的JSON序列化方法。查询数据库后,我可以通过REST API轻松呈现该数据。当我将secondary表用于多对多关系时,这些表是db.Table的实例,如下所示:

elections_voters = db.Table(
    'elections_voters',
    db.metadata,
    db.Column('election_id', db.Integer, db.ForeignKey('elections.id'), primary_key=True),
    db.Column('user_id', db.Integer, db.ForeignKey('users.id'), primary_key=True),
)

class Election(MyModel):
    __tablename__ = 'elections'

    id = db.Column(db.Integer, db.Sequence('election_id_seq'), autoincrement=True, primary_key=True)
    name = db.Column(db.Unicode(255))
    voters = db.relationship('User', secondary=elections_voters, backref='electionsVoting')

假设我想要一个API,它只列出了特定选举的选民名单。我会执行Election.query.get_or_404(election_id)之类的操作,然后返回election.voters.mycustomserialize(),因为voters将由SQLAlchemy填充。但是,它不是db.Model的实例,就像它的父类一样,所以我不能对那个孩子使用我的序列化方法。

有没有办法设置我的模型,使elections_voters辅助表格是db.Model的完整实例,而不仅仅是db.Table,这是明智的吗?我的序列化方法需要访问列名,这就是为什么我不能将它拆分成独立的方法。

1 个答案:

答案 0 :(得分:0)

我过度思考了:

在这种情况下,elections.voters只是一个列表,而不是模型实例。我可以使用list comprehension来处理序列化。

此外,有Association Objects符合我的描述,但我认为我不需要它们。