在多对多关系中添加记录会导致sqlalchemy中出现重复错误

时间:2013-02-09 21:36:36

标签: python sql sqlalchemy many-to-many

我有2个表:BookAuthor和辅助表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合并不合并添加的作者是否正常?它只适用于一个方向吗?如果是,如何通过合并两个作者条目来复制书籍条目?

1 个答案:

答案 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部分。