3

私は2つのテーブルを持っています:とセカンダリテーブルBookで、次のコードに似ています:Authorbooks_authors

book=Book()
for author in authors:
     a = Author()
     a.books.append(book)
     session.merge(a) #1

session.merge(book) #2
session.commit()     

このコードはエラーを引き起こします

sqlalchemy.exc.IntegrityError: 
(IntegrityError) (1062, "Duplicate entry '1234' for key 'id'") 
'INSERT INTO `Book` (title, id)  VALUES (%s, %s)' ('test', u'1234')

これはマージが 2 回 (#1、#2) 行われているためだと思います。

だから私は削除することにし#1ました。エラーは発生しませんが、テーブル Author には何も表示されません。私が remove を決定したとき#2、本に追加された著者が1人だけである限り、テーブル Book、Author および books_authors は正しく入力されます。

作成者が増えると、前のエラーと同様のエラーが発生します。

#2マージが追加された著者をマージしないのは正常ですか? 一方向にしか機能しませんか?はいの場合、2 つの著者エントリをマージしてブック エントリを重複させない方法は?

4

1 に答える 1

0

私はあなたのアプリケーションコードに精通していませんが、あなたが試みていることの要点は次のようになるはずです:

まだそこにない場合は、本のレコードを挿入します。

著者レコードがまだない場合は、挿入します。

book_authorsレコードがまだ存在しない場合は、挿入します。

重複エントリを防ぐには、このタイプの構文を使用してください。

insert into yourtable
(field1, field2, etc)
select distinct value1, value2, etc
from some_small_table
where not exists
(subquery to check for existing records)

データベースエンジンによっては、fromsome_small_tableの部分は必要ない場合があります。

于 2013-02-09T21:51:46.357 に答える