如何使用Python从SQLAlchemy多对多关系访问项目?

时间:2016-01-13 02:51:57

标签: python sqlalchemy

我的多对多模型看起来像这样,带有一个关联表:

class Puppy(Base):
    __tablename__ = "puppy"
    id = Column(Integer, primary_key=True, nullable=False)
    name = Column(String(80))

class Adopter(Base):
    __tablename__ = "adopter"
    id = Column(Integer, primary_key=True, nullable=False)
    name = Column(String)
    puppies = relationship('Puppy', secondary='puppy_adopters', backref="puppy")

puppy_adopters = Table('puppy_adopters', Base.metadata,
                       Column('puppy_id', Integer, ForeignKey('puppy.id')),
                       Column('adopter_id', Integer, ForeignKey('adopter.id')))

如果我创建了一个名为Bill的Adopter,我可以使用Python轻松添加和检索他的小狗:

bill.puppies.append(fido)
bill.puppies.append(rex)
for puppy in bill.puppies:
    print puppy.name     # Fido, Rex

当我执行此操作时,puppy_adopters关联表会填充Bill的ID和Fido的ID。但我如何看待Bill与Fido有关,使用Python?我使用fido = session.query(Puppy).filter_by(name="Fido")为Fido获取了一个Python对象,但是没有包含Bill的fido.adopters列表。我怎样才能看到所有采用Fido的人?

我在小狗桌上尝试了这一行:

adopter_id = Column(Integer, ForeignKey('adopter.id'))

但是当我添加一个采用者时它没有填充,并且无论如何也无法容纳多个采用者。

1 个答案:

答案 0 :(得分:1)

SQLAlchemy文档在RadioSelect部分提供了您需要的内容。您要找的是checkbutton_state

String str = "12 + 43 * (12 / 2)";
int answer;

answer = str.magic(); 

//str.magic is the same as 
answer =   12 + 43 * (12 / 2);