【问题标题】:Update multiple SQL columns using PUT method in Flask在 Flask 中使用 PUT 方法更新多个 SQL 列
【发布时间】:2022-01-26 04:58:11
【问题描述】:

在 Python 烧瓶中,如果我想更新 Postgres 数据库表中的数据,下面的 put 方法有效。在下面的代码中使用'if condition'我正在检查和更新三列的值,即fname、lname、address。

我的问题是,如果我想更新更多列,例如 30 到 40 列,我应该编写多个单独的“if 语句”还是有任何优化的方法来更新更多列?

class TodoId(Resource):
    def put(self,email):
        data = parser.parse_args()

    todo = Model.query.get(email)

    if 'fname' in data.keys():
        todo.fname = data.get('fname')
    if 'lname' in data.keys():
        todo.lname = data.get('lname')
    if 'address' in data.keys():
        todo.address = data.get('address')

    db.session.commit()

【问题讨论】:

    标签: python flask flask-sqlalchemy flask-restful


    【解决方案1】:

    你可以写一个通用的更新方法:

    class TodoId(Resource):
        def put(self,email):
            data = parser.parse_args()
    
        todo = Model.query.get(email)
    
        for key, value in data.items():
            if hasattr(todo, key) and value is not None:
                setattr(todo, key, value)
    
        db.session.commit()
    

    【讨论】:

    • 它部分有效。但问题是,与 todo 匹配的 data dict 中的键被正确更新,但 todo 中的其余值被更新为 NULL
    • 在这种情况下您期望什么值? NULL 似乎没问题,当密钥没有传入数据时
    • 我在一个表中有十列,如果我只想更新两列,是否应该为 JSON 对象中剩余的 8 列传递键值以进行 PUT 操作?
    • 不,只有2个你想更新
    • 我不确定,解析后数据结构如何,但我修改了代码以跳过空值。
    【解决方案2】:

    您可以使用“更新”方法并将数据对象传递给它。

    class TodoId(Resource):
        def put(self,email):
            data = parser.parse_args()
    
        Model.query.get(email).update(data)
        db.session.commit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2021-05-13
      • 2018-01-12
      • 2017-07-04
      • 2013-11-16
      相关资源
      最近更新 更多