【发布时间】:2014-03-07 04:40:04
【问题描述】:
情况:
所以,我在 SQLAlchemy 中有一个基本的多对多关系,使用 association table。
例如,一个人可以参加很多聚会,而一个聚会可以有很多人作为客人:
class Person(Base):
__tablename__ = 'person'
id = Column(Integer, primary_key=True)
name = db.Column(db.String(50))
class SexyParty(Base):
__tablename__ = 'sexy_party'
id = Column(Integer, primary_key=True)
guests = relationship('Person', secondary='guest_association',
lazy='dynamic', backref='parties')
guest_association = Table(
'guest_association',
Column('user_id', Integer(), ForeignKey('person.id')),
Column('sexyparty.id', Integer(), ForeignKey('sexyparty.id'))
)
通常,如果我想在聚会中添加客人名单,我会这样做:
my_guests = [prince, olivia, brittany, me]
my_party.guests = guests
db.session.commit()
...其中prince、olivia 和brittany 都是<Person> 实例,而my_party 是<SexyParty> 实例。
我的问题:
我想使用个人 ID 而不是实例将客人添加到聚会中。 例如:
guest_ids = [1, 2, 3, 5]
my_party.guests = guest_ids # <-- This fails, because guest_ids
# are not <Person> instances
我总是可以从数据库中加载实例,但这需要一个不必要的数据库查询,只是为了设置一个简单的多对多关系。
如何使用 person_id 的列表设置 .guests 属性?
必须有一种简单的方法来做到这一点,因为关联表最终表示使用 ID 的多对多关系......
提前致谢,希望问题清楚。
【问题讨论】:
标签: python sql sqlalchemy many-to-many flask-sqlalchemy