首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在烧瓶中一次更新多行-SQLAlchemy错误: AttributeError:'InstanceState‘对象没有属性'_post_inspect’

在烧瓶中一次更新多行-SQLAlchemy错误: AttributeError:'InstanceState‘对象没有属性'_post_inspect’
EN

Stack Overflow用户
提问于 2022-07-28 05:10:39
回答 1查看 142关注 0票数 0

我试图在使用带有用户输入数据的SQLAlchemy中更新多行。我正在查询Unique_Key以选择要编辑的行。我试图编辑的三列是:Content, Link and Price,但是每次我试图更新行时,都会得到相同的错误:

AttributeError:“InstanceState”对象没有属性“_post_inspect”

我的代码如下,任何帮助都是非常感谢的,我也是一个新手程序员,所以我为我可怕的代码提供了支持。

DB模型

代码语言:javascript
复制
class wl(db.Model):
    username_wl = db.Column(db.String(20), nullable=False)
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(200), nullable=False)
    price = db.Column(db.String(200), nullable=False)
    link = db.Column(db.String(200), nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.utcnow)

更新路由

代码语言:javascript
复制
@app.route('/update/<int:id>', methods=['GET', 'POST'])
def Update(id):
    item = wl.query.get_or_404(id)

    if request.method == "POST":
        content = request.form.get('content')
        link = request.form.get('link')
        price = request.form.get('price')

        db.session.query(item).update(values={'price': price}) # Where the error is occuring
        db.session.query(item).update(values={'content': content})
        db.session.query(item).update(values={'link': link})
#
        db.session.commit() 
        return redirect('/index')

    else:   
        return render_template('/update.html', item=item)

代码语言:javascript
复制
<form action="/update/{{item.id}}" method="POST">
            <input type="text" name="content" id="content" value="{{item.content}}" placeholder="Item Name">
            <input type="text" name="link" id="link" value="{{item.link}}" placeholder="Link">
            <input type="text" name="price" id="price" value="{{item.price}}" placeholder="Price">
            <input type="submit" value="Update">
</form>
EN

回答 1

Stack Overflow用户

发布于 2022-07-28 08:10:11

如果我正确理解了您的代码,您将在这一行代码中选择要更新的所有项:

代码语言:javascript
复制
item = wl.query.get_or_404(id)

因此,item是模型对象的list。但是update()方法是sqlalchemy查询对象的一个属性。可以按以下方式更新行,而项目是您的db.model类:

代码语言:javascript
复制
@app.route('/update/<int:id>', methods=['GET', 'POST'])
def Update(id):
    item = Item.query.filter(Item.id == id)

    if request.method == "POST":
        content = request.form.get('content')
        link = request.form.get('link')
        price = request.form.get('price')

        item.update(values={'price': price, 'content': content, 'link': link})

        db.session.commit()
        return redirect('/index')
    else:   
        return render_template('/update.html', item=item.all())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73147550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档