简体   繁体   English

SQLAlchemy primaryjoin 为一对多关系返回空 object

[英]SQLAlchemy primaryjoin returns emtpy object for one-to-many relation

I have tables defined as:我的表定义为:

class Car(Base):
    __tablename__ = 'cars'
    CarID = Column('id', Integer, primary_key=True)
    CarDetails = relationship(
          "CarDetails", 
          back_populates="Car", 
          primaryjoin="and_(CarDetails.CarID == Car.CarID, CarDetails.CarNumber == 1)",
        )
    CustomCarDetails = relationship(
              "CarDetails", back_populates="Car", uselist=True)

class CarDetails(Base):
    __tablename__ = 'car_details'
    ID = Column('id', Integer, primary_key=True)
    CarNumber = Column('car_number', Integer, default=1)
    CarID = Column('table_id', Integer, ForeignKey(
        'tables.id'), nullable=False)
    Car = relationship("Car", back_populates="CustomCarDetails")

Car: CarDetails follows 1-to-many relation.汽车:CarDetails遵循一对多关系。 In CarDetails column (in Car), I want to populate entries with CarNumber=1 for the respective Car.CarDetails列(在 Car 中),我想为相应的 Car 填充CarNumber=1的条目。 With the above definition, I get empty object. I have referred this also.根据上面的定义,我得到空的 object。我也提到了这个 What am I missing here?我在这里错过了什么?

When I have it defined as follows, CarDetails returns a random entry from CarDetails(may return the record with CarNumber != 1 ), whereas I only want entry corresponding to CarNumber=1 :当我将其定义如下时,CarDetails 从 CarDetails 返回一个随机条目(可能返回CarNumber != 1的记录),而我只想要对应于CarNumber=1的条目:

CarDetails = relationship(
                "CarDetails", 
                back_populates="Car", 
                uselist=False)

How can I fix this?我怎样才能解决这个问题?

Adding uselist=False worked here:添加uselist=False在这里工作:

CarDetails = relationship(
      "CarDetails", 
      back_populates="Car", 
      primaryjoin="and_(CarDetails.CarID == Car.CarID, CarDetails.CarNumber == 1)",
      uselist=False
    )

I couldn't find this in the documentation!!我在文档中找不到这个!!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM