我有python线程应用程序+ Postgres。我正在使用Django的ORM
保存到Postgres ..
我有并发保存电话。偶尔有2个线程保存
相同的主键导致问题。
Postgres日志:
错误:重复键值违反唯一约束“store_pkey”
声明:INSERT INTO“store”(“store_id”,“address”)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 湾如何处理这种情况..任何评论。
谢谢和问候, 拉姆亚
答案 0 :(得分:2)
只是为了确保,如果我理解正确,你会使用字符串作为主键吗?
AttributeError:'NoneType'对象没有属性'cursor'
这意味着某些Python代码中存在错误。您是否尝试过使用Django的其他版本或修订版或者在Django trac中搜索您的错误?如果你使用的是trunk中的版本,那么受到某些bug影响的情况并不少见。
作为替代方案,您也可以尝试使用多个进程而不是多个线程来部署Django,如果这是一个选项。
但是,您可能仍然想知道为什么您会收到重复请求,因为它可能会发现其他一些错误。