3

我有 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。没有发生错误,但表 Author 中没有任何内容。当我决定删除#2时,表格 Book、Author 和 books_authors 填写正确,只要只有一位作者被添加到书中。

更多作者导致与以前的错误类似。

#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)

根据您的数据库引擎,可能不需要 from some_small_table 部分。

于 2013-02-09T21:51:46.357 回答