如何在Flask Peewee中使用更新查询?

时间:2013-10-08 04:50:34

标签: python flask models flask-wtforms peewee

您好我正在使用Flask Peewee并尝试更新merchant_details模型,但它无效。 以下是我得到的错误:

  

AttributeError:'SelectQuery'对象没有属性'update'

mdetails = merchant_details.filter(merchant_details.merchant_id==session['userid']).update(
         merchant_name=request.form['merchantname'],
          first_name=request.form['firstname'],
          last_name=request.form['lastname'],
        )

请帮助!

3 个答案:

答案 0 :(得分:13)

首先,看起来您使用的是2.0之前的语法(现在不推荐使用filter方法)。我建议查看docs以获取最新版本的信息。

通常,您不“更新查询”。实现这一目标的两种主要方式是......

1。)使用查询检索对象,然后使用save()方法更新对象。例如......

mdetails = MerchantDetails.select().where(MerchantDetails.id == 42).get()
mdetails.name = 'new name'
mdetails.save() # Will do the SQL update query.

2.)使用SQL更新语句...

q = MerchantDetails.update(MerchantDetails.name='new name')
    .where(MerchantDetails.id == 42)
q.execute() # Will do the SQL update query.

这两者本质上都是完成同样的事情。第一个将对数据库进行两次查询(一次是SELECT记录,另一次是更新记录),而第二次只使用一次SQL调用(更新记录)。

答案 1 :(得分:3)

我得到了解决方案

mdetails = merchant_details.update(
          merchant_name=request.form['merchantname'],
          first_name=request.form['firstname'],
          last_name=request.form['lastname'],
          street_1=request.form['street1'],
          street_2=request.form['street2'],
          state=request.form['state'],
          city=request.form['city'],
          phone=request.form['phone'],
          zipcode=request.form['zip'],
        ).where(merchant_details.merchant_id==session['userid'])
        mdetails.execute()

无论如何感谢Mark

答案 2 :(得分:0)

我也搜索了此解决方案,感谢@Mark和@Rohit,我更改了代码(PostgreSQL的Peeweee)并且可以正常工作。

要添加一点改进,即使您不使用该变量,似乎也会执行更新。对我来说,更简单更清洁的代码:

: