查询和获取信息2 backrefs深

时间:2012-05-18 16:51:48

标签: python orm sqlalchemy

我在用户和拍卖之间有一个名为many-many的{​​{1}}表。

我正在通过竞价进行查询,因此我在placedBids进行了回复,同时也调用了placedBids,以便我可以通过竞价访问它,然后我可以获得已放置出价的placedbids,但我真的想要它userid,所以我在usernameuser placedbids之间的关系中创建了一个backref(我改变了,因为已经有另一个backref叫{ {1}},虽然可能存在某些问题)尝试这样做,但我是userbids中的新手我已经尝试了很多东西,即使在users背景中急切加载也无济于事。< / p>

这是我的上一次查询:

sqlalchemy

错误:

  

2012-05-18T16:40:36 + 00:00 app [web.1]:AttributeError:两者都没有'InstrumentedAttri   bute'object和'Comparator'对象有一个属性'username'

我也试过加入userbidsauction = 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我可以毫无问题地获得,但我想知道如何没有那个。

1 个答案:

答案 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()