我有2个表:Book
,Author
和辅助表books_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')
我想这是因为合并了两次(#1,#2)。
所以我决定删除#1
。不会出现错误,但表中没有任何内容出现。
当我决定删除#2
时,表格Book,Author和books_authors正确填写,只要只有一位作者被添加到预订中。
更多作者会将simillar视为先前的错误。
#2
合并不合并添加的作者是否正常?它只适用于一个方向吗?如果是,如何通过合并两个作者条目来复制书籍条目?
答案 0 :(得分: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)
根据您的数据库引擎,可能不需要some_small_table部分。