sqlalchemy 中 column 类型为 list 的情况 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hanssx
V2EX    Flask

sqlalchemy 中 column 类型为 list 的情况

  •  
  •   hanssx 2019-06-24 10:34:26 +08:00 5391 次点击
    这是一个创建于 2299 天前的主题,其中的信息可能已经有发展或是发生改变。

    现有一个需求,table 中某 column (假定为 col_a )有多个顺序递增的日期(不确定列表中到底有多少个日期,所以不能固定的构造 N 个字段来存),我可以把 col_a 的类型设置成 string 或者 pickle (这个存储类型不重要)。

    在构造查询条件的时候,会传入一个 begin_time 和 end_time,查询 col_a 中是否有某个时间在 begin_time 和 end_time 之间,如果有,条件成立,否则条件不成立。

    正常来说,如果 col_a 是一个日期,sqlalchemy 中用 between 就可以了,但是现在 col_a 是一个有多个递增日期的列表,原生 sql 我都想不出来怎么写,sqlalchemy 是不是也没法直接写出来。

    目前能想到的就是先取出所有 table 的记录,遍历一遍 col_a 列,把所有满足条件的记录存储成一个临时表,然后在临时表的基础上再构造其他查询条件。

    还有其他方案吗?(感觉这个有点蛋疼,我愿意为知识付费 20 元。

    7 条回复    2019-06-24 23:13:36 +08:00
    myyou
        1
    myyou  
       2019-06-24 11:33:31 +08:00
    把日期单独开一个表存储,然后连接查询一下不行吗?
    hanssx
        2
    hanssx  
    OP
       2019-06-24 11:55:28 +08:00
    @myyou 好像也只能这样了,在 flask 群里有 2 个哥们给了 2 种答案,
    一种就是你这种,再弄一个表
    另外一种是使用 mysql 的 json 函数,但是我搜索发现 json_search 好像只能匹配,无法比较。
    要是还没有其他方案的话,只能这样了,到时候我给你转 5 块钱以表诚意,因为群里的哥们先说的。。。抱歉。
    我的 QQ:9614 六 2392
    myyou
        3
    myyou  
       2019-06-24 12:02:51 +08:00   1
    @hanssx 不用转账,随手一答,不一定是最好的解决办法。
    jybox
        4
    jybox  
       2019-06-24 15:56:59 +08:00
    添加两个 column 分别来存列表里最小的日期和最大的日期,这样不就可以比较了
    hanssx
        5
    hanssx  
    OP
       2019-06-24 18:49:37 +08:00
    @jybox 我刚一开始的时候和你的想法一样,后来我发现有问题,举个例子,
    简化假设 begin_time 和 end_time 是 5 7,那么给你 2 个序列
    [3,6,9]
    [3,8,9]
    其中,第一个序列中 6 是在 5、7 之间的,所以它满足条件;相反第二个序列就不满足条件,所以只取最小和最大值的方案是不可行的,必须得遍历。
    jybox
        6
    jybox  
       2019-06-24 23:00:43 +08:00
    确实。在数据库这端大概筛选一下,缩小数据量就可以了,然后到应用后端再精确过滤一遍。
    strict
        7
    strict  
       2019-06-24 23:13:36 +08:00
    我愿意为知识付费 20 元。
    抱歉,这句话逗笑我了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1252 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:05 PVG 01:05 LAX 10:05 JFK 13:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86