繁体   English   中英

如何在 Flask sqlalchemy 中更新特定用户的行

[英]How to do I update rows of particular user in Flask sqlalchemy

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

@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 不在用户表中,那么这些值应该得到更新。

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

谢谢,

为什么要过滤每个 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!")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM