【问题标题】:Is it a good practice to store SQL query in the database?将 SQL 查询存储在数据库中是一种好习惯吗?
【发布时间】:2020-09-10 11:04:17
【问题描述】:

我的用例:

我们允许系统用户根据 UI 中的各种过滤器创建联系人详细信息列表(即细分)。因此,他们使用表单创建细分,以选择所有生活在特定州的人。

所以这里的问题是,当添加新联系人时,我希望这些段也能更新。我能想到的解决方案是为每个段保存 SQL 查询,并在使用这些 SQL 查询添加新联系人时更新每个段。

我想只以 json 字符串格式保存参数,但这种情况下的复杂情况是可用的过滤器针对多个表,并且无法生成动态 SQL 查询,因为它涉及连接和不同的过滤器(即“in”, 'endswith' 等)。

我认为它们中的任何一个都不是最好的解决方案。有更好的想法吗?

任何帮助将不胜感激,在此先感谢!

更新:我需要的 JSON 参数和查询

{'is_buyer': ['1'], 'is_executive_member': ['1'], 'is_member': ['1'], 'survey_participant': ['1'], 'cluster': ['A'], 'state': ['state1'], 'city': ['ab', 'cd'], 'gender': ['male']}

预期的查询输出:

SELECT * FROM `contacts` INNER JOIN `contacts_clusters` ON (`contacts`.`KEY` = `contacts_clusters`.`KEY`) WHERE (`contacts`.`IS_BUYER` IN (1) AND `contacts`.`IS_EXECUTIVE_MEMBER` IN (1) AND `contacts`.`IS_MEMBER` IN (1) AND `contacts`.`SURVEY_ID` IS NOT NULL AND `contacts_clusters`.`CLUSTER` IN ('A') AND `contacts`.`STATE` IN ('state1') AND `contacts`.`CITY` IN ('ab', 'cd') AND `contacts`.`GENDER` IN ('male'))

这只是分段过滤器的示例之一。还有更多的参数和表格可用于创建段。

【问题讨论】:

    标签: mysql django mysql-python


    【解决方案1】:

    我认为您最好存储段所需的参数,然后在添加新联系人时,您会根据存储的段参数检查新联系人是否匹配。如果他们这样做,那么您将更新细分。

    【讨论】:

    • 是的,但正如我在那种情况下所说,我无法使用这些参数本身生成查询,因为它涉及多个表和不同类型的过滤器。对我来说,动态生成 SQL 查询成为了一个问题。
    • 您能否编辑您的问题以提供有关查询生成的更多详细信息?序列化参数应该不是不可能的。
    • 我已经添加了json参数和输出查询示例。请看一看。
    • 您当前是否为此生成查询集?如果是这样,请包含该代码。
    • 不,我还没有编写任何用于生成查询集的逻辑,因为它会导致大量 if else 语句(对特定参数执行此操作,对其他参数执行此操作)。这就是我考虑存储 SQL 本身的原因。
    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2018-01-17
    • 2015-12-14
    相关资源
    最近更新 更多