[英]Django IntegrityError with DateField - when creating objects with get_or_create
[英]Django IntegrityError with get_or_create
我在Django的get_or_create上遇到問題,我已經在一些帖子中看到了這個問題,這些帖子已經說明了它是MySQL的問題,所以我關注了這篇文章http://www.no-ack.org/2010/07/mysql-transactions- and-django.html
基本上說,由於MySQL默認的REPEATABLE READ
事務隔離,並發創建對象時get_or_create
將返回IntegrityError
。
我按照帖子的建議進行操作,該操作是將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
通常,不應將get_or_create
與數據庫中不唯一的字段一起使用。 避免此問題的一種方法是強制名稱字段的唯一性:
class Author(models.Model):
name = models.CharField(max_length=100, unique=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.