2017-09-15 12 views
0

私は、書かれた仕様からSQLAlchemyコードを作成する小さなツールを作成しました。このツールは、このようなコードを作成することができます。SQLAlchemyのクエリ結果で外部キーを "解決"する方法はありますか?

class Person(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(50)) 
    address_id = db.Column(db.Integer, db.ForeignKey('address.id')) 

class Address(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(50)) 

私は、私は魔法のように動作している、それらを照会することができ、新しいレコードを挿入することができますが、私は本当に手動でのアドレスを探すために持っていないしたいと思います人。

私は、特定の人物に属するアドレスにPersonオブジェクトを介してアクセスしたいと考えています。私が正しく例を理解していれば、私はこれを行う必要があります(例はhttp://flask-sqlalchemy.pocoo.org/2.1/models/#one-to-many-relationshipsに基づいています)?

class Person(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(50)) 
    address = db.relationship('Address', backref='person', 
           lazy='dynamic') 

class Address(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(50)) 
    person_id = db.Column(db.Integer, db.ForeignKey('person.id')) 

は、これは私はすべてのアドレスに人への「リンク」を与える必要があり、その後、後方参照ので、私は人のためのアドレスを持つことができ、後方私のすべてに見えますか?これはPersonから直接行うことはできませんか?

また、このためのコードを作成することははるかに複雑なので、私はそれを避けたいと思います。

答えて

1

Personは正確に1つのアドレスを持つことができますが、各アドレスは複数のPersonによって使用できます。 2番目のソリューションPersonは複数のアドレスを持つことができるようになりましたが、各アドレスは特定のPersonに固有です(ForeignKeyの移動テーブルに注意してください)。

あなたはN:1からN:1になりました。 1面のインスタンスではなく、N面のリストが必要だと言うことで、より多くを指定する必要があります。

+0

私が知っているのは、私が尋ねる理由です。私が見つけることができる1:1の例はありません。そして、1:Nの例はすべて、(私にとって)余分なバックリファレンスが起こっています。可能な限り最も簡単な方法を1:1で実行する方法を知りたいので、Personを持っているときにAddressの2番目のクエリを実行する必要はありません。 – ramdyne

関連する問題