我有以下课程:
Class User(Base):
#user properties
Class Item(Base):
#item properties
Class User_Item(Base):
__tablename__='users_items'
id=Column(Integer, primary_key=True)
user_id=Column(Integer, ForeignKey('users.id'))
item_id=Column(Integer, ForeignKey('items.id'))
info=Column(String(20))
user=relationship(User,backref='items',primaryjoin=(User.id==user_id))
item=relationship(Item, backref='users',primaryjoin=(Item.id==item_id))
现在以下两个查询有什么区别:
result1= session.query(Item).options(joinedload(Item.users)).filter(Item.users.any(user=user1)
或者
result2=session.query(Item).join(Item.users).filter(Item.users.any(user=user1))
由于某种原因,第二个看起来很奇怪!假设 user1 有两个项目,运行result1.count()
按预期返回 2,但result2.count()
返回 3!而,len(result2.all())
是2!谁能告诉我,这是怎么回事?!:D