首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过修补程序进行部分更新:如何解析用于SQL更新的JSON数据?

通过修补程序进行部分更新:如何解析用于SQL更新的JSON数据?
EN

Stack Overflow用户
提问于 2015-05-10 04:27:28
回答 2查看 1.7K关注 0票数 10

我正在服务器端实现‘补丁’,以便对我的资源进行部分更新。

假设我没有在JSON请求/响应中公开SQL数据库模式,即在JSON中的键和表的列之间存在单独的映射,那么如何才能最好地确定在SQL中更新哪一列(考虑到部分更新的JSON )?

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

代码语言:javascript
复制
[
    {"op": "replace", "path": "/b", "value": "some_new_value"}
]

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

当然,我可以在某个地方的keys_to_columns块中硬编码这些映射,并且在每次请求时使用一些patch_data,我可以这样做:

代码语言:javascript
复制
mapped_updates = {keys_to_columns[p['path'].split('/')[-1]]: p['value'] for p in patch_data}

然后使用mapped_updates为DB update构造SQL语句。如果上面抛出一个KeyError,我知道请求数据无效,可以丢弃它。我需要对我拥有的每一张桌子/资源都这样做。

我想知道是否有更好的方法。

EN

回答 2

Stack Overflow用户

发布于 2015-05-12 19:26:13

这与您想要做的类似,但是您可以为每个表创建类,而不是创建映射。例如:

代码语言:javascript
复制
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})

这只是一些基本的启发,这些类可以扩展来做更多的事情。

票数 1
EN

Stack Overflow用户

发布于 2015-05-15 17:33:21

代码语言:javascript
复制
patch_json = [
    {"op": "replace", "path": "/b", "value": "some_new_value"},
    {"op": "replace", "path": "/a", "value": "some_new_value2"}
]

def fix_key(item):
    item['path'] = item['path'].replace('/', 'col_')
    return item

print map(fix_key, patch_json)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30147724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档