ImはDjangoのget_or_createの問題を持って、私はすでにそのMySQLの問題は、私は基本的にget_or_create
が返されることを述べている。このポスト http://www.no-ack.org/2010/07/mysql-transactions-and-django.htmlジャンゴIntegrityErrorはget_or_create
に従っていることexplaningいくつかの記事では、この問題を見てきましたMySQLのデフォルトのトランザクションアイソレーションREPEATABLE READ
のためにオブジェクトを同時に作成するときは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
ループでも使用しているコードを表示できますか? –
'author.book_set.get_or_create(name = book)'を実行したときにどうなるか分かりません。私は個人的にそれをもっと明示的に行うでしょう: 'Book.objects.get_or_create(name = book、defaults = {'author':author})'またはそれに類するもの。正確なエラーを投稿できますか?役立つかもしれません。 – Stefano