質問

PythonスレッドアプリケーションとPostgresがあります。 DjangoのORMを使用しています Postgresに保存します。
同時保存呼び出しがあります。時々2つのスレッドが保存されます 問題につながる同じ主キー。

Postgresログ:
エラー:キー値の重複が一意の制約" store_pkey"
に違反しています 文:「ストア」に挿入します; (" store_id"、" address")値 (E'HAN277 '、E'101 Ocean Street')

コード:
コードにはIntegrityErrorが表示されます。さまざまな方法を試しました この。

a。
    try:
        a.save()
    IntegrityError:
を除く         パス

これによりInternalErrorが発生します

b。トランザクションのロールバックを試みました..しかし確かではありません。 トランザクションを持つためには、保存呼び出しを区別する必要があることを理解してください

      sid = transaction.savepoint()
      try:
        row.save()
      except IntegrityError, e:
        transaction.savepoint_rollback(sid)
        pass
      transaction.commit()

最初のセーブポイントは次のエラーで失敗します

AttributeError: 'NoneType'オブジェクトには属性 'cursor'がありません

a。 djangoは100%スレッドセーフではありません。いいですか 私のユースケースでの選択。私はすでに他のアプリケーションにDjangoを使用していました ORMが必要です。だから当然Djangoを選択しました
b。この状況に対処する方法..コメント。

ありがとうございます。 ラミア

役に立ちましたか?

解決

念のため、正しく理解できれば主キーに文字列を使用していますか?

  

AttributeError: 'NoneType'オブジェクトには属性 'cursor'がありません

これは、一部のPythonコードにエラーがあることを意味します。 Djangoの別のバージョンまたはリビジョンを使用したり、バグをDjango tracで検索したりしましたか?トランクのバージョンを使用している場合、何らかのバグの影響を受けることは珍しくありません。

選択肢として、複数のスレッドの代わりに複数のプロセスを使用してDjangoをデプロイすることもできます。

ただし、他のバグが発見される可能性があるため、リクエストが重複している理由を確認したい場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top