python - 通过 PATCH : how to parse JSON data for SQL updates? 进行部分更新

标签 python json api rest http-patch

我正在服务器端实现“PATCH”以部分更新我的资源。

假设我在 JSON 请求/响应中公开我的 SQL 数据库模式,即在 JSON 中的键和表的列之间存在单独的映射,我如何最好地找出哪个列( s) 在给定部分更新的 JSON 的情况下在 SQL 中更新?

例如,假设我的表有3列:col_acol_bcol_c,以及JSON键到表列的映射是:a -> col_a, b -> col_b, c -> col_c。给定 JSON-PATCH 数据:

[
    {"op": "replace", "path": "/b", "value": "some_new_value"}
]

以编程方式将此部分更新应用到与我的资源对应的表的 col_b 的最佳方法是什么?

当然,我可以在某个地方的keys_to_columns dict 中对这些映射进行硬编码,并且根据每个带有一些patch_data 的请求,我可以这样做:

mapped_updates = {keys_to_columns[p['path'].split('/')[-1]]: p['value'] for p in patch_data}

然后使用mapped_updates 构造数据库更新的SQL 语句。如果上面抛出一个 KeyError 我知道请求数据无效并且可以将其丢弃。我需要为我拥有的每个表/资源执行此操作。

不知道有没有更好的方法

最佳答案

这与您打算做的类似,但您可以为每个表创建类,而不是创建 map 。例如:

class Table(object):
    """Parent class of all tables"""

    def get_columns(self, **kwargs):
        return {getattr(self, k): v for k, v in kwargs.iteritems()}

class MyTable(Table):
    """table MyTable"""

    # columns mapping
    a = "col_a"
    b = "col_b"

tbl = MyTable()
tbl.get_columns(a="value a", b="value b")
# the above returns {"col_a": "value a", "col_b": "value b"}
# similarly:
tbl.get_columns(**{p['path'].split('/')[-1]: p['value'] for p in patch_data})

这只是可以从中获得灵感的基本内容,这些类可以扩展以做更多事情。

关于python - 通过 PATCH : how to parse JSON data for SQL updates? 进行部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30147724/

相关文章:

javascript - MVC Asp.Net Controller 将原始 JSON 返回到新窗口

php - 如何使用 URL 中的 $_GET 参数重定向到同一页面

Python 过程返回值

python - 如何从字典中仅提取某些值(python)

python - 根据 python 中的 cut 对 pandas 数据帧进行排序?

c# - 使用 C# 的短 URL 的长 URL

amazon-web-services - 如何为 Route53 -> EC2 -> API 端点反向代理路径设置 HTTP 测试

python - 如果超过 'tries per x' 则阻止某些 ip

c# - 按键分组对象

ios - JSON 到 iOS5 中的字符串