5

嗨,我正在使用 Flask Peewee 并尝试更新 Mercer_details 模型,但它不起作用。以下是我得到的错误:

AttributeError:“SelectQuery”对象没有属性“更新”

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'],
        )

请帮忙!

4

3 回答 3

18

首先,看起来您使用的是 2.0 之前的语法(该filter方法现在已弃用)。我建议查看文档以获取有关最新版本的信息。

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

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.

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

于 2013-10-08T05:52:36.217 回答
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()

无论如何谢谢马克

于 2013-10-08T05:54:41.083 回答
0

我也搜索了这个解决方案,感谢@Mark 和@Rohit 我更改了我的代码(使用 PostgreSQL 的 peeweee)并且正在工作。

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

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']).execute()
于 2019-02-09T06:24:07.980 回答