sql数据库如何更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql数据库如何更新相关的知识,希望对你有一定的参考价值。

一、使用Update 语句Update 语句用于修改表中的数据。语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 Person: 如:有下表LastNameFirstNameAddressCityGatesBillXuanwumen 10BeijingWilson Champs-Elysees 例:更新某一行中的一个列 我们为 lastname 是 "Wilson" 的人添加 firstname:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 结果: LastNameFirstNameAddressCityGatesBillXuanwumen 10BeijingWilsonFredChamps-Elysees 更新某一行中的若干列 我们会修改地址(address),并添加城市名称(city):UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson' 结果: LastNameFirstNameAddressCityGatesBillXuanwumen 10BeijingWilsonFredZhongshan 23Nanjing 通过以上语句,可以在程序中执行 UPDATE语句即可更新数据库。当然,前提是根据你开发语言环境,使用编程语言连接好数据库,引用相应的对象和定义好相关的变量。 二、通过存储过程如果你的数据库是SQL2000 或者是2005,可以在DBMS中写存储过程,在程序中调用存储过程,传递参数进行更新即可。具体可以BAIDU一下,我就不去找了。 参考技术A 一般来说在从一个表中读出一条记录后,先要判断目标表中是否已经存在该记录?如果存在使用UPDATE语句更新数据,如果不存在则使用INSERT语句插入目标表中。
至于如何实现,那要看你用的是什么开发环境了

通过 PATCH 进行部分更新:如何解析 JSON 数据以进行 SQL 更新?

【中文标题】通过 PATCH 进行部分更新:如何解析 JSON 数据以进行 SQL 更新?【英文标题】:Partial updates via PATCH: how to parse JSON data for SQL updates? 【发布时间】:2015-07-20 18:43:20 【问题描述】:

我正在服务器端实施“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 我知道请求数据无效并且可以将其丢弃。我需要为我拥有的每个表/资源执行此操作。

不知道有没有更好的办法。

【问题讨论】:

我猜你想要这个抽象层,这样你就可以灵活地更改数据库架构而不影响 REST API? @MartinKonecny,是的,另外,我可能只是想对 API 用户隐藏 DB 模式的语义。 我认为您需要的是位于数据库之上的第 3 层,它可以序列化并执行您的查询/更新,并在 API 级别以您想要的形式表示数据。例如:JSON Schema 这很好,因为您还可以验证、记录和保持资源和 API 的灵活性。 @JamesMills,好点子,所以我查了一下:python-jsonschema.readthedocs.org/en/latest,它似乎根据预定义的 JSON 模式验证了一段 JSON 数据。这很好,但我认为我真正需要的是验证器和解析器的组合,它只检查允许的 JSON 键,并将这些键解析到它们相应的数据库列。您是否知道任何现有的解决方案或者我需要自己编写? 【参考方案1】:
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)

【讨论】:

感谢您的回答。我不是在寻找我给出的玩具示例的特定代码(我已经为此提出了解决方案),我更感兴趣的是解决问题的最佳方法(例如设计模式、库等)。 我认为,小问题不需要特殊解决。【参考方案2】:

这与您的想法类似,但您可以为每个表创建类,而不是创建地图。例如:

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 地定义字段映射。您还可以通过在父类中添加必要时可重写的泛型方法来扩展类的功能。

以上是关于sql数据库如何更新的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件的更新sql 数据表中的列值?

通过 PATCH 进行部分更新:如何解析 JSON 数据以进行 SQL 更新?

如何将sql数据库自动定时的备份或更新到另一台电脑

如何在 Redshift 数据库上从 Python 触发更新 SQL

如何使用 SQL 更新这些数据? [复制]

如何通过php更新sql中的json数据