如何更新包中的数组

时间:2015-08-07 12:38:13

标签: php crate

我想知道如何在crate.io

中更新存储在数组中的值
  • 我有一个博客表 - blog_tbl
  • 一个列,数据类型为数组 - tags
  • id
  • 在标签栏内,我有 - ["tag1","tag2","tag3"]

我想知道如何将'tag1'更改为'tag99'

我试过

update blog_tbl set tags['tag1'] = 'tag99' where id = '1';

另外,如何添加一个到底?所以制作它 -

["tag1","tag2","tag3","tag4"]
非常感谢

2 个答案:

答案 0 :(得分:1)

不幸的是,目前还不可能。只能使用下标表示法(例如:py:mod:)选择数组元素,但不能更新。也许添加GH问题请求该功能。

答案 1 :(得分:0)

您可以使用此处找到的模式:https://crate.io/docs/reference/sql/occ.html#optimistic-update

但是,这需要您在客户端执行修改。伪代码:

updated = False
while not updated:
    cursor.execute('SELECT array_field, "_version" FROM table WHERE id=1')
    row = cursor.fetchone()
    current_array_field = row[array_field]
    current_array_field.append('newtag')
    cursor.execute('UPDATE array_field = current_array_field WHERE id=1 AND "_version" = row[version]')
    if cursor.rowcount > 0:
        updated = True

这将使您的更新对于同一字段的并发更新半安全。