gpt4 book ai didi

python - SQLAlchemy:为什么我提出 HTTPFound 会导致没有数据插入数据库?

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:47 25 4
gpt4 key购买 nike

我使用 Pyramid 框架构建了一个 View ,允许用户输入一些信息并将该信息作为新记录插入到我的数据库中。代码是这样的:

def orderplace_view(request):
user = User.get(authenticated_userid(request))
cart = Cart.get_by_user(user)

if cart.itemtypes == None: # cat is empty
request.session.flash(u'Empty cart')
raise HTTPFound(location = request.route_url('cart'))

placeorderform = PlaceOrderForm(request.POST)
placeorderform.address.query = UserAddress.query_by_user(user)

if request.POST and placeorderform.validate():
# create order
order = Order()
order.address = placeorderform.address.data

# fill order with other attributes...
user.orders.append(order)

# IMPORTANT LINE!!!
raise HTTPFound(location = request.route_url('order_list'))

return {'user': user,
'title': 'place order',
'cart': cart,
'placeorderform': placeorderform}

奇怪的是:如果我注释掉“raise HTTPFound()”行,一切正常,一个新订单将被插入到数据库中。但是如果我保留将用户重定向到订单列表页面的那一行,订单将不会被插入!为什么会这样?

最佳答案

如果 Pyramid 事务中间件正在使用中,它将在 View 函数引发异常时中止包含的事务:http://docs.pylonsproject.org/projects/pyramid_tm/en/latest/#transaction-usage

使用 transaction.commit() 显式提交,或者更好的是,返回 HTTPFound 而不是引发它。

关于python - SQLAlchemy:为什么我提出 HTTPFound 会导致没有数据插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12594812/

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