gpt4 book ai didi

python - 用户表中的外键已保存但立即回滚

转载 作者:行者123 更新时间:2023-11-29 23:59:40 25 4
gpt4 key购买 nike

我有一个非常奇怪的问题,我已经困扰了好几天了。

假设会发生什么:用户点击一个 URL/ View ,其中包含一些逻辑,可以在我的 Payments 表中创建一个新对象,然后立即将其保存为我的 User 表的外键。返回 View 的 HttpResponse 并保留外键(当然)。

实际发生的情况:外键保存时没有任何问题,但一旦函数执行结束(特别是当从 View 返回 HttpResponse 时),外键就会被删除。 User 表的外键在 MySQL 数据库中变为“NULL”。

--

造成这种情况的潜在原因有哪些?看起来这里正在触发某种类型的回滚。我有一些想法(例如检查自定义中间件),但这些想法没有产生任何结果。

其他一些注意事项:

  • 我尝试在同一事务中更新文本字段,并且在 HttpResponse 之后也会回滚。所以我们知道不仅仅是外键被撤销。
  • 当我进入 django shell 并复制 View 的逻辑(创建一个新的 Payment 对象,然后将其另存为 User 表的外键)时,它会永久保存外键,没有任何问题或回滚!所以我们知道这与函数的逻辑没有直接关系。
  • 当我使用 super 用户帐户登录我的网站时,我尝试通过浏览器访问该 URL,但这并没有改变任何内容。我认为这意味着这不可能是权限问题,但并不完全确定。

非常感谢任何想法/想法:(

更新:这是我的代码的缩短版:

class CapturePayment(View):
def get(self, request, auth_id, user_id):
pmt = Payment.objects.get(id=auth_id) // get the payment object that was successfully made in prev function
usr = User.objects.get(id=user_id)
usr.payment_fk = pmt // also have tried "usr.payment_fk_id = pmt.id"
usr.save()

// here I do another lookup on the same user to see if this object saved.
check_usr = User.objects.get(id=user_id)
logger.info(check_usr.payment_fk) // shows up in the log with the correct payment object

// HttpResponse returns, but upon checking MySQL database the foreign key is replaced with "NULL" again
return HttpResponse(something)

最佳答案

完成后提交交易!

根据 link in the comments 检查 AUTOCOMMIT 是否设置为 FALSE.. ..

You can totally disable Django’s transaction management for a given database by setting AUTOCOMMIT to False in its configuration. If you do this, Django won’t enable autocommit, and won’t perform any commits. You’ll get the regular behavior of the underlying database library.

您可能还需要在 MySQL 中检查这一点。

SHOW GLOBAL VARIABLES WHERE variable_name = 'autocommit';

关于python - 用户表中的外键已保存但立即回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com