【问题标题】:Can SQLAlchemy secondary tables be db.Model instances?SQLAlchemy 辅助表可以是 db.Model 实例吗?
【发布时间】: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


    【解决方案1】:

    我想多了:

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

    另外,Association Objects 可以满足我的描述,但我认为我不需要它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      相关资源
      最近更新 更多