是否可以使用id而不是对象来添加到SQLAlchemy关系?

例如,考虑两个声明性的SQLAlchemy类,Review和Artist,它们之间具有关系:

class Review(Base):
    artist_id = Column(Integer, ForeignKey('artist.id'))
    artist = relationship(Artist, backref=backref('reviews', order_by=id))
    # etc.

class Artist(Base):
    # etc.

有了要添加到艺术家的评论ID列表,我似乎需要从ID查找艺术家,然后将Artist对象添加到评论中,如下所示:
for review_id in review_ids:
    review = session.query(Review).filter(Review.id==review_id).first()
    artist.reviews.append(review)

我敢肯定,跳过查找并仅添加ID会更有效,但这可能吗?

最佳答案

最好的选择可能是针对后备表编写一个update表达式。否则,您不能在不实际查询的情况下真正修改Review(这就是您要做的;您实际上根本没有在修改Artist)。

假设Review.id是主键,则大致为:

conn = session.connection()
conn.execute(Review.__table__
                .update()
                .values(artist_id=artist_id)
                .where(Review.id.in_(review_ids))
            )

关于python - SQLAlchemy:使用ID而不是对象添加关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6024462/

10-12 16:34