【发布时间】:2014-02-23 04:57:46
【问题描述】:
我正在开发一个 Flask-SQLAlchemy 项目,并且我已经实现了一个很好的 JSON 序列化方法,该方法适用于我的 SQLAlchemy 模型。查询数据库后,我可以轻松地通过 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,这样做是否明智?我的序列化方法需要访问列名,这就是为什么我没有把它拆分成一个独立的方法。
【问题讨论】:
标签: python sqlalchemy flask-sqlalchemy