我在用户和拍卖之间有一个名为many-many
的{{1}}表。
我正在通过竞价进行查询,因此我在placedBids
进行了回复,同时也调用了placedBids
,以便我可以通过竞价访问它,然后我可以获得已放置出价的placedbids
,但我真的想要它userid
,所以我在username
和user
placedbids
之间的关系中创建了一个backref(我改变了,因为已经有另一个backref叫{ {1}},虽然可能存在某些问题)尝试这样做,但我是userbids
中的新手我已经尝试了很多东西,即使在users
背景中急切加载也无济于事。< / p>
这是我的上一次查询:
sqlalchemy
错误:
2012-05-18T16:40:36 + 00:00 app [web.1]:AttributeError:两者都没有'InstrumentedAttri bute'object和'Comparator'对象有一个属性'username'
我也试过加入userbids
或auction = dbsession.query(Auction.id, Auction.endTime, Auction.currentPrice, Product.description, Product.title, User.username, PlacedBids.timeplaced, PlacedBids.userbids.username).outerjoin(Auction.placedbids).join(Auction.products).outerjoin(Auction.leader).filter( Auction.id == request.matchdict['id']).all()
等等......
我对outerjoin(Auction.placedbids.userbids)
没有太多经验,我可以进行额外的查询以获得PlacedBids.userbids
sqlalchemy
我可以毫无问题地获得,但我想知道如何没有那个。
答案 0 :(得分:0)
连接必须始终是显式的,并根据实际的父类指定主体实体属性。相关类之间没有“多点”访问 - 这意味着必须始终单独加入连接。
假设此处PlacedBids.userbids是UserBid的一个实例:
auction = dbsession.query(Auction.id, Auction.endTime,
Auction.currentPrice, Product.description, Product.title, User.username,
PlacedBids.timeplaced, UserBid.username).\
outerjoin(Auction.placedbids).\
join(Auction.products).\
outerjoin(Auction.leader).\
outerjoin(PlaceBids.userbids).\
filter( Auction.id == request.matchdict['id']).all()