0

Django の get_or_create に問題があります。MySQL の問題であるとすでに説明しているいくつかの投稿でこの問題を見たので、この投稿 http://www.no-ack.org/2010/07/mysql-transactions-に従いました。 and-django.html

これは基本的に、MySQL のデフォルトのトランザクション分離が であるため、オブジェクトを同時に作成するget_or_createと が返されることを示しています。IntegrityErrorREPEATABLE 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
4

1 に答える 1