0

many-many我在用户和拍卖之间有一张名为placedBids.

我正在从拍卖中查询,所以我placedBids也调用了 backref,placedbids所以我可以从拍卖中访问它,然后我可以得到例如已userid放置的出价,但我真的想要它,所以我在和调用username之间的关系中创建了一个 backref (这个我改变了,因为已经有另一个名为 的 backref ,尽管可能存在一些问题)尝试这样做,我是新手,我尝试了很多事情,甚至在backref 中急切加载也无济于事。userplacedbidsuserbidsuserssqlalchemyuserbids

这是我的最后一个查询:

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

错误:

2012-05-18T16:40:36+00:00 app[web.1]:AttributeError:“InstrumentedAttri bute”对象和“比较器”对象都没有属性“用户名”

我也尝试过加入喜欢outerjoin(Auction.placedbids.userbids)PlacedBids.userbids等等......

我没有太多经验sqlalchemy,我可以做一个额外的查询来获得usernameuser_id可以毫无问题地获得,但我想知道如何在没有它的情况下进行。

4

1 回答 1

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()
于 2012-05-23T15:42:53.903 回答