我有python线程应用程序+ Postgres。我正在使用Django的ORM 保存到Postgres ..
我有并发保存电话。偶尔有2个线程保存 相同的主键导致问题。

Postgres日志:
错误:重复键值违反唯一约束“store_pkey”
声明:INSERT INTO“存储” (“store_id”,“地址”)VALUES (E'HAN277',E'101 Ocean Street')

代码:结果 在代码中我看到了IntegrityError。我尝试了不同的方法来处理 这个。

一个。结果     尝试:点击         a.save()点击     除了IntegrityError:
        传递

这会导致InternalError

湾试图做交易回滚..但不确定..至于我 了解您需要区分保存调用以进行交易

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

第一个保存点失败,带

AttributeError:'NoneType'对象没有属性'cursor'

一个。我在某处读到django不是100%线程安全的。这是好事 在我的用例中选择。我已经在使用Django进行其他应用了 并需要一个ORM ..所以我很自然地选择了Django 湾如何处理这种情况..任何评论。

谢谢和问候, 拉姆亚

有帮助吗?

解决方案

只是为了确保,如果我理解正确,你会使用字符串作为主键吗?

  

AttributeError:'NoneType'对象没有属性'cursor'

这意味着某些Python代码中存在错误。您是否尝试过使用Django的其他版本或修订版或者在Django trac中搜索您的错误?如果你使用的是trunk中的版本,那么受到某些bug影响的情况并不少见。

作为替代方案,您也可以尝试使用多个进程而不是多个线程来部署Django,如果这是一个选项。

但是,您可能仍然想知道为什么您会收到重复请求,因为它可能会发现其他一些错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top