我对 Django 的 get_or_create 有问题,我在一些帖子中看到了这个问题,已经解释了它是一个 MySQL 问题,所以我关注了这篇文章 http://www.no-ack.org/2010/07/mysql-transactions-和-django.html
基本上说,由于get_or_create
MySQLIntegrityError
的默认事务隔离为REPEATABLE READ
.
我按照帖子的建议进行了操作,将其添加transaction-isolation = READ-COMMITTED
到我的
/etc/mysql/my.cnf
文件中,但遇到了同样的错误。所以我想知道是否还有其他解决方案。
这是一个复制问题的示例模型
class Author(models.Model):
name = models.CharField(max_length=100, unique=True)
class Book(models.Model):
name = models.CharField(max_length=100, unique=True)
author = models.ForeingKey(Author)
如果我有一长串作者和书籍,有些重复。我运行一个forloop来遍历每个作者/书,使用get_or_create来创建或获取相应的对象,它会抛出一个IntegrityError。
循环类似于..
authors = ['Author1', 'Author2', 'Author3', 'Author4', 'Author5']
books = ['book1', 'book2', 'book3', 'book4', 'book5']
for author, book in zip(authors, books):
author = Author.objects.get_or_create(name=author)[0]
author.book_set.get_or_create(name=book) # Error happens here