mysql的json数据类型

mysql在5.7中增加了对json类型的支持,可以看作是mysql对mongodb的一种屈服,以空间,时间,计算成本实现功能性。
近期开发表单组件相关功能,mongo最适合用来处理这些数据,可考虑到老数据兼容问题,涉及到工作量,最终选择了mysql的json类型来完成此功能,也是本人第一次使用mysql的json类型。下面谈一下使用感受及遇到的问题。

以python为例

1.数据创建
创建数据时跟其他类型相同,插入json类型即可,可以是json数组,也可以是对象。
2.查询数据
数据查询是选择json类型的主要原因之一,储存在mysql中的json类型,可以直接当成对象查询,适用于对象本身的属性及方法,当然,这是牺牲空间时间换来的,初用此类型便沉迷其中,因为非常好用,但这里还是不建议大量使用,毕竟不如nosql来的好用。
3.修改数据
在修改数据时,遇到了问题,原本把json类型按照其他类型一样直接修改,但是并没有生效,折腾一番才知道需要用到flag_modified

def flag_modified(instance, key):
    """Mark an attribute on an instance as 'modified'.

    This sets the 'modified' flag on the instance and
    establishes an unconditional change event for the given attribute.
    The attribute must have a value present, else an
    :class:`.InvalidRequestError` is raised.

    To mark an object "dirty" without referring to any specific attribute
    so that it is considered within a flush, use the
    :func:`.attributes.flag_dirty` call.

    .. seealso::

        :func:`.attributes.flag_dirty`

    """
    state, dict_ = instance_state(instance), instance_dict(instance)
    impl = state.manager[key].impl
    impl.dispatch.modified(state, impl._modified_token)
    state._modified_event(dict_, impl, NO_VALUE, is_userland=True)

具体用法如下:
当json内储存的类型为字典字符串时,添加数据用到字典的update方法

    def update(self, value, index=0):
        self.apply_form.update(value)
        flag_modified(self, 'apply_form')
        db.session.add(self)

其他操作,数组的添加删除,都只需用对应方法即可,这基本上也是使用mysql储存json类型唯一一个需要注意的地方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值