是否可以使用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/