Flask SQLAlchemy多对多删除元素

塔瑟尔

我的Flask网站上有“建议和用户”。

class Suggestion(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_nickname = db.Column(db.Integer, db.ForeignKey('user.nickname'))
    voters = db.relationship('User', secondary=votes, lazy='dynamic')

class User(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    suggestions = db.relationship('Suggestion', backref='user', lazy='dynamic')
    votes = db.relationship('Suggestion', secondary=votes, lazy='dynamic') 

我已经在两者之间建立了多对多关系。

votes = db.Table('votes',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('suggestion_id', db.Integer, db.ForeignKey('suggestion.id'))
)

当我尝试在views.py中删除建议时,出现错误。

风景:

@app.route('/_delete_suggestion', methods=['GET', 'POST'])
    def delete_suggestion():
    user_nickname = request.form.get('user_nickname')
    user = User.query.filter_by(nickname=user_nickname).first()
    sugg_id = request.form.get('sugg_id')
    sugg = Suggestion.query.filter_by(id=sugg_id).first()
    if user.is_special:
        db.session.delete(sugg)
        db.session.commit()
    else:
        flash('You are not cool enough to do that!')
        return redirect(url_for('index'))
    return

@app.route('/_upvote', methods=['GET', 'POST'])
    def upvote():
    user_nickname = request.form.get('user_nickname')
    user = User.query.filter_by(nickname=user_nickname).first()
    sugg_id = request.form.get('sugg_id')
    sugg = Suggestion.query.filter_by(id=sugg_id).first()
    if sugg.voters.filter_by(nickname=user_nickname).first() is not None:
        print("ERR", file=sys.stderr)
    else:
        print("VOTED", file=sys.stderr)
        sugg.score += 1
        sugg.voters.append(user)
        user.votes.append(sugg)
        db.session.add(sugg)
        db.session.add(user)
        db.session.commit()
    return

错误:

StaleDataError: DELETE statement on table 'votes' expected to delete 2 row(s); Only 4 were matched.

我知道的:

  • 我可以删除没有任何投票的建议。

我尝试过的

  • 我尝试添加view-only=True到模型中。
  • 我尝试删除所有建议的投票者,并从所有用户的投票中删除该建议,然后再删除。
  • 我一直在看所有StackOverflow和Google都发布的与此问题相关的帖子,但没有任何运气。

我想念什么?这把我撞墙了!

编辑:在python解释器中,我尝试了以下操作。

s = Suggestion.query.first()
for v in s.voters.all():
    s.voters.remove(v)
s.voters.all()

然后崩溃了,并产生了相同的StaleDataError。

塔瑟尔

我想到了!我在_upvote路由内两次添加了“多对多”数组

原始_upvote代码段:

print("VOTED", file=sys.stderr)
sugg.score += 1
sugg.voters.append(user)
user.votes.append(sugg)
db.session.add(sugg)
db.session.add(user)
db.session.commit()

固定_upvote摘要:

print("VOTED", file=sys.stderr)
sugg.score += 1
sugg.voters.append(user)
db.session.add(sugg)
db.session.commit()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Flask-SQLAlchemy多对多

来自分类Dev

Flask-SQLAlchemy查询多对多

来自分类Dev

使用Flask-SQLAlchemy选择多对多

来自分类Dev

Flask-SQLAlchemy多对多插入

来自分类Dev

SqlAlchemy(Postgres + Flask):如何求和多列?

来自分类Dev

SQLAlchemy + Flask多对一关系

来自分类Dev

SqlAlchemy(Postgres + Flask):如何求和多列?

来自分类Dev

设置多对多sqlalchemy flask app sqlite db的插入顺序

来自分类Dev

使用Flask-SQLAlchemy进行多对多查询

来自分类Dev

Jsonify Flask-SQLAlchemy Flask中的多对一关系

来自分类Dev

通过Flask显示好友名称多对多sqlalchemy

来自分类Dev

Flask-Sqlalchemy 3种多对多关系

来自分类Dev

Flask-Sqlalchemy,多对多关系中的辅助表的主键

来自分类Dev

我应该使用flask sqlalchemy多对多关系吗?

来自分类Dev

Flask-SQLAlchemy筛选与父模型的多对多关系

来自分类Dev

Flask-SQLAlchemy更新一对多记录

来自分类Dev

如何使用flask-sqlalchemy多次插入多对多关系?

来自分类Dev

Jsonify flask-sqlalchemy烧瓶中的多对一关系

来自分类Dev

Flask-Sqlalchemy,多对多关系中的辅助表的主键

来自分类Dev

在Flask sqlalchemy中订购一对多模型?

来自分类Dev

Flask-SQLAlchemy查询带有多个必需标签的多对多标签

来自分类Dev

Flask SQLalchemy-多对多-显示带有所有标签的照片(或包含所有帖子的博客等)

来自分类Dev

使用Flask,WTForm,SQLAlchemy和Jinja2的完整多对一示例

来自分类Dev

如何使用带有额外数据的Flask-sqlalchemy创建多对多关联?

来自分类Dev

Flask-appbuilder多对多关系sqlalchemy.exc.NoReferencedTableError错误

来自分类Dev

如何在SQLAlchemy(python,flask)中为模型用户创建多对多关系

来自分类Dev

Flask / SQLAlchemy-多对多关系的关联模型和关联表之间的区别?

来自分类Dev

使用多对多关系时,Flask-SQLAlchemy返回查询中的对象

来自分类Dev

如何在SQLAlchemy(python,flask)中为模型用户创建多对多关系

Related 相关文章

  1. 1

    Flask-SQLAlchemy多对多

  2. 2

    Flask-SQLAlchemy查询多对多

  3. 3

    使用Flask-SQLAlchemy选择多对多

  4. 4

    Flask-SQLAlchemy多对多插入

  5. 5

    SqlAlchemy(Postgres + Flask):如何求和多列?

  6. 6

    SQLAlchemy + Flask多对一关系

  7. 7

    SqlAlchemy(Postgres + Flask):如何求和多列?

  8. 8

    设置多对多sqlalchemy flask app sqlite db的插入顺序

  9. 9

    使用Flask-SQLAlchemy进行多对多查询

  10. 10

    Jsonify Flask-SQLAlchemy Flask中的多对一关系

  11. 11

    通过Flask显示好友名称多对多sqlalchemy

  12. 12

    Flask-Sqlalchemy 3种多对多关系

  13. 13

    Flask-Sqlalchemy,多对多关系中的辅助表的主键

  14. 14

    我应该使用flask sqlalchemy多对多关系吗?

  15. 15

    Flask-SQLAlchemy筛选与父模型的多对多关系

  16. 16

    Flask-SQLAlchemy更新一对多记录

  17. 17

    如何使用flask-sqlalchemy多次插入多对多关系?

  18. 18

    Jsonify flask-sqlalchemy烧瓶中的多对一关系

  19. 19

    Flask-Sqlalchemy,多对多关系中的辅助表的主键

  20. 20

    在Flask sqlalchemy中订购一对多模型?

  21. 21

    Flask-SQLAlchemy查询带有多个必需标签的多对多标签

  22. 22

    Flask SQLalchemy-多对多-显示带有所有标签的照片(或包含所有帖子的博客等)

  23. 23

    使用Flask,WTForm,SQLAlchemy和Jinja2的完整多对一示例

  24. 24

    如何使用带有额外数据的Flask-sqlalchemy创建多对多关联?

  25. 25

    Flask-appbuilder多对多关系sqlalchemy.exc.NoReferencedTableError错误

  26. 26

    如何在SQLAlchemy(python,flask)中为模型用户创建多对多关系

  27. 27

    Flask / SQLAlchemy-多对多关系的关联模型和关联表之间的区别?

  28. 28

    使用多对多关系时,Flask-SQLAlchemy返回查询中的对象

  29. 29

    如何在SQLAlchemy(python,flask)中为模型用户创建多对多关系

热门标签

归档