テーブルauthors
とbooks
は多対多の関係にあります。本は多くの作家を持つことができます。著者はおそらく多くの本を書いています。多対多の関係(sqlalchemy、python)を仮定し、重複を追加しないようにするには?
author_1 = Author('Dan')
session.add(author_1)
author_1.books = [Paper('Illuminati'), Book('Sacrileg')]
session.commit()
これは、2冊の本と著者をデータベースに追加してリンクします。これまでのところすべてが問題ありません。異なる表の両方の列(authors.name
とbooks.title
)は一意です。
新しい投稿者を追加しましょう。Danには、Illuminatiと書かれているとしましょう。
author_2 = Author('Brownie')
session.add(author_2)
author_2.books = [Paper('Illuminati')]
session.commit()
この結果、重複エラーが発生します。何故ですか?最初にPaper('Illuminati')
をクエリする必要がありますか?もし私が本のリスト全体を持っていたら?私はそれらのすべての1つを照会する必要がありますか?または、自動関数があります。エントリが既に存在し、それにリンクしているかどうかをsqlalchemyがどのように判断できるのでしょうか?
'ペーパー(「イルミナティは」)は'新しいオブジェクトたびに、(「1」) 'の同じオブジェクトではありません' =紙に気づくを作成します'b = Paper( '1')'と同じように、あなたの論文はDB内の同じオブジェクトではありません。試してみてください 'paper = Paper( 'Illuminati'); author_1.books = [ペーパー]; author_2.books = [論文]; 'または、author_2で設定する前に最初の用紙(DB内)を選択してください。あなたの素敵な答えに感謝します。 – renatopp