我有以下类别:区别
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
你想用你的查询来达到什么目的? – schlamar
例如,在这里我想查找它们映射到user1的所有项目(不使用user1.items !!!),或者更现实的示例是找到所有与'info =“something”'相关的项目。我认为这是我可以实现的第一个查询,但我的问题是第一个和第二个查询是不同的?! – Amin
[我的答案](http://stackoverflow.com/a/14340250/851737)对你的其他问题也可能解决这个问题,... – schlamar