【问题标题】:How to efficiently store similar SQL queries for API execution如何有效地存储用于 API 执行的类似 SQL 查询
【发布时间】:2021-07-07 18:53:24
【问题描述】:

我正在 Flask 中编写一个 API,它加载保存在文件中的查询以执行它们。执行的查询取决于输入格式。但是,所有查询都是相同的,只是它们可能具有这 4 个 sn-ps 中的 1 个:

SELECT *
FROM shipments
WHERE origin = %(origin)s
AND destination = %(destination)s

SELECT *
FROM shipments
WHERE origin = %(origin)s
AND destination IN %(destination)s

SELECT *
FROM shipments
WHERE origin IN %(origin)s
AND destination = %(destination)s

SELECT *
FROM shipments
WHERE origin IN %(origin)s
AND destination IN %(destination)s

有没有更好的方法来保存和修改基于输入格式的单个 SQL 查询,而不是有 4 个略有不同的副本?

我不确定这是否是可取的,因为它们 4 个不同的查询,但我想知道是否有一种方法可以参数化查询本身,例如:

SELECT *
FROM shipments
WHERE origin %(origin_format)q %(origin)s
AND destination %(destination_format)q %(destination)s

其中%(origin_format)q%(destination_format)q 将是IN=

【问题讨论】:

    标签: python sql postgresql


    【解决方案1】:

    解决方案:为了将 4 个查询减少到 1 个,每个 sn-p 现在看起来像:

    SELECT *
    FROM shipments
    WHERE origin {orig_in_or_equals} %(origin)s
    AND destination {dest_in_or_equals} %(destination)s
    

    然后应用程序:

    1. 读取查询
    2. 将字节转换为字符串
    3. 根据需要将{orig_in_or_equals}{dest_in_or_equals} 替换为IN=
    4. 将字符串转换回字节

    然后像往常一样使用其参数执行查询。

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多