(更新:。完全に動作するコードサンプルがhereある)SQLAlchemyのとあいまいなのForeignKey
class City(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), index=True)
country_id = db.Column(db.Integer, db.ForeignKey('country.id'))
country = db.relationship('Country', back_populates='cities')
class Country(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), index=True)
cities = db.relationship('City', back_populates='country')
は、多くの中から1つを区別することによってaugmentedすることができ、このMany-To-One関係は、首都として言います。
これらの二つの溶液のうち、別のテーブルを追加すること
class Capital(db.Model):
# https://stackoverflow.com/q/45767923/8099646
id = db.Column(db.Integer, primary_key=True)
country = db.Column(db.Integer, db.ForeignKey('country.id'))
capital = db.Column(db.Integer, db.ForeignKey('city.id'))
実現可能であるが、よりよい解決策は、余分なテーブルを回避し、単にフィールドを挿入することです:
class Country(db.Model):
...
capital = db.Column(db.Integer, db.ForeignKey('city.id'))
なぜSQLAlchemyのは、文句を言うんAmbiguousForeignKeysError
その行が追加されたら?二つの可能性(すなわちcountry_id
とcapital
)があるため、
私はあなたが私の知る限りでは死角を指摘しているように感じます。私は参照を追求することができますいくつかのキーワードを言及できますか?もっと読むには、教科書のデータベースの文献(リレーショナルデータベース)、SQLの仕組み(SQLの錬金術以外)、特にSQLの錬金術を見てみましょう。 – Sebastian
@セバスチャン私があなたが知らないことを知らないので、その質問に答えるのは難しいですが、私はあなたが深い理解を得たいかもしれないいくつかのことを言及します:1.外部キーを使って関係をモデル化する方法SQLのみを使用します。 2.外部キーを介して互いに参照する2つのテーブルを持つ 'CREATE TABLE'(なぜ、' ALTER'なしでは不可能です)。 3.外部キーを使用して互いに参照する自動インクリメント主キーを持つ 'INSERT' 2行(なぜ、それが' UPDATE'なしでは不可能です)。 4. http://docs.sqlalchemy.org/en/latest/core/exceptions.html#sqlalchemy.exc.CircularDependencyError – univerio