【问题标题】:How to do I update rows of particular user in Flask sqlalchemy如何在 Flask sqlalchemy 中更新特定用户的行
【发布时间】:2021-12-27 05:30:32
【问题描述】:

我有一个过滤掉用户数据的查询,如果有任何新的更改到达,我必须定期更新

@api.route('/updateUser')
def update_user():
    newUpdate = ['ABC-123', 'DCS-344', 'FDC-473','HJG-297']
   
    name = "name1"
    user = User.query.filter_by(user = name).all()
    # user Ouput: ['ABC-123', 'BCD-23', 'DCS-344']
    try:
       for i in newUpdate:
         data = User(user =name, ID=i)
         rows_updated =User.query.filter_by(name=name).update(ID=i))
         db.session.add(rows_updated)
         db.session.commit()
         print("User record updated successfully!")
    except:
       print("Something went wrong! - Not updated")

目前的输出:

user          ID
name1     ABC-123
name1     BCD-233
name1     DCS-344
name2     ABE-113
name2     BCS-776
name3     RTD-445
name3     UTR-554

期望的输出:

user          ID
name1     ABC-123
name1     BCD-233
name1     DCS-344
name1     FDC-473  *
name1     HJG-297  *
name2     ABE-113
name2     BCS-776
name3     RTD-445
name3     UTR-554

这里 * 是 name1 的新更新记录,当这个 update_user() 函数触发时,它应该更新 name1 记录。

  • 不应删除旧 ID
  • 它应该验证数据库中是否存在相同的 ID,如果用户表中没有该 ID,那么这些值应该得到更新。

有人可以帮忙处理上面的代码吗?我已经尝试了很多关于更新值的在线可用资源,但没有找到?我还在学习阶段。

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    为什么要过滤每个 for 循环?只需检查您的第一个查询是否已退出并添加到会话中。

    您无法更新该表中的任何行,因为您有相同的名称。你怎么知道哪一行会更新?您的病情只是名称,而您有多个相同的名称。

    无需更新,您就可以像这样添加新用户:

       for i in newUpdate:
           if i not in user:
             data = User(user =name, ID=i)
             db.session.add(data)
             db.session.commit()
             print("User record updated successfully!")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 2018-05-14
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多