2016-10-02 12 views
2

Imはペットの所有者を取得しようとしている属性または人は、私はペットを照会したいと私はペットを選択した後、私はペットの所有者名を取得したいフラスコSQLAlchemyの一つは

class Person(db.Model): 
     id = db.Column(db.Integer, primary_key=True) 
     name = db.Column(db.String(20)) 
     pets = db.relationship('Pet', backref='owner', lazy='dynamic') 


class Pet(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(20)) 
    owner_id = db.Column(db.Integer, db.ForeignKey('person.id')) 

に名前を付ける

pets = Pet.query.all() 
for pet in pets: 
    print pet.owner_id 

は、所有者IDを与えるだろうが、私たちはSQLAlchemを強制照会のタイプを使用して所有者名

+0

SQLAlchemy ORMチュートリアルを読む必要があります。このような関係での作業は、そこでカバーされています。 – inklesspen

答えて

1
pets = db.session.query(Pet, Person.name).join(Person) 

for pet, person_name in pets: 
    print pet.name, person_name 

にしたいですyをpetテーブルのマッピングをPetオブジェクトに使用し、Personの名前をセレクトの2番目のアイテムとして取得します。そして、あなたはこの方法でそれを使用することができます

pets = db.session.query(Pet, Person).join(Person) 

:もちろん、あなたがそのようなものを使用することができます

for pet, person in pets: 
    print pet.name, person.name 

はそうPersonクラスのオブジェクトとして、人への参照を持っています。しかし、最初の選択肢は、人の名前だけを取得するだけであるため、より速いのでもっと望ましいです。

+0

ありがとうございます。出来た。あなたが私に好意を持って、私が学ぶことができるように私をドキュメントにリンクすることができますか? –

+0

確かに、ここでクエリについてです:http://docs.sqlalchemy.org/en/latest/orm/query.html、多分私は私の答えで詳細を説明します。 – turkus

関連する問題