被各种关系数据库的 json 操作坑死了

2020-08-04 14:20:09 +08:00
 lolizeppelin
抄的 openstack 的单元测试, 测试数据库相关测试都用 sqlite

平时单元测试都没什么问题,这两天处理 json 字段的查询的时候搞死人了
兼容 mysql 还好点....兼容 sqlit 简直要死,看了半天最后翻 sqlite 文档发现 sqlite 的 json 没有 contains 方法
需要用 json_each 生成的临时表来过滤。。。。

orm 里没法弄了,array 这个玩意又只有 pg 支持

sqlite 单元测试太好用了点,妈的不会真要单元测试也连个 pg 吧 orz
但是 sqlite 又没法测 json

烦死了,sqlalchemy 文档也看到头大
4777 次点击
所在节点    Python
32 条回复
virusdefender
2020-08-04 14:57:24 +08:00
docker run 一个 pg 不很简单么
johnsona
2020-08-04 15:00:44 +08:00
这告诉我们不要在 rdbms 用 json,老老实实关联
lolizeppelin
2020-08-04 15:13:54 +08:00
@virusdefender

不是简单不简单的问题, 单元测试会不停的创建销毁,这种情况 sqlite 是最方便的
love
2020-08-04 15:14:53 +08:00
什么场景要在关系数据库时用 json 呢?
lolizeppelin
2020-08-04 15:16:02 +08:00
@jsisjs20130824
简单的 array 还是很方便的啊,本机 ip 列表,hostname 之类的真是方便啊,

但是! 数据库支持都不统一呀............

fuck !!!!
yjhatfdu2
2020-08-04 16:02:13 +08:00
试试 ponyorm
mahone3297
2020-08-04 16:06:28 +08:00
线上用 pg,测试用 sqlite ?
你能确保,你的测试,在测试环境过了,线上不出问题?虽然理论上,orm 封装了。。。
coolyujiyu
2020-08-04 16:49:34 +08:00
测试的环境和线上不一致?作死?
arischow
2020-08-04 16:53:29 +08:00
环境不统一这不科学
janxin
2020-08-04 16:54:55 +08:00
不是应该环境一致么...

万一踩到引擎不一致的坑怎么办?
thonatos
2020-08-04 16:55:53 +08:00
显然,是被自己坑死的,和数据库没关系
Vegetable
2020-08-04 17:02:23 +08:00
sqlite 和 mysql 、pg 还是有一定区别的,一旦用到了其他数据库的特性,都没办法在 sqlite 上测试了吧,比如 DjangoOrm 有一些 pg 特有的特性,sqlite 还有个什么操作不支持,有点记不清了,遇到过一次。
cco
2020-08-04 17:05:34 +08:00
目前只用过 mysql 的 json 。。。。pg 想用没有需求
mxT52CRuqR6o5
2020-08-04 17:18:45 +08:00
@lolizeppelin 测试的目的是尽可能模拟真实环境找出问题,而不是为了方便开发
你对测试的理解就有问题
lyhiving
2020-08-04 17:25:42 +08:00
关联 JSON 是不对的,JSON 在数据库里面只是为了储存方便。
johnsona
2020-08-04 18:40:26 +08:00
@lolizeppelin 废话,pg 和 mysql 对 json 的支持能统一吗,你老老实实用 orm,会帮你把关联表转化成 array 好吧,别乱用,你抄 openstack 单元测试的时候,怎么不抄人家的表结构设计呢
Sunkz
2020-08-04 18:42:54 +08:00
我最近搞 postgis 快被坑死了
chinvo
2020-08-04 18:47:41 +08:00
efcore 的 sqlite 官方 驱动对有些查询的表现就和其他数据库的驱动不一致

既然是单元测试, 目的就是保障线上运行正常, 为什么不和线上环境保持一致

嫌单元测试实例销毁频繁也没办法, 你可以看看各种流行开源项目, CI 的时间基本都是消耗在 setup 阶段
chinvo
2020-08-04 18:48:18 +08:00
实在不行就 mock 吧

不实际操作数据库, 全都 mock sql 语句

就默认 sql 语句一定能正常工作好了
wangkun025
2020-08-04 18:51:16 +08:00
测试和生产不用同一种数据库,谁给你的勇气?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/695519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX