python-3.x - 使用字典替换 SQL 查询中的参数
问题描述
我将 SQL 查询作为字符串:
SELECT DISTINCT a, b AS value FROM ${source} WHERE b IN (${string}) AND slice_start >= ${date} AND slice_start <= ${date1};
我需要使用字典替换参数,它来自 JSON 文件,如下所示:
my_dict = {"source": "table", "string": "abc", "date": "2020-01-01", "date1": "2020-01-02"}
我很困惑如何替换以开头的每个字符串$
以及如何"
在末尾和每个参数的请求处附加(但不是在源上),因此可以稍后执行 SQL 查询。这就是我现在的位置:
for k, v in target_groups_queries.items():
if isinstance(v, dict):
for k1, v1 in v.items():
queries = v1['sql'].split()
final_string = ' '.join(str(my_dict.get(word, word)) for word in queries)
print(final_string)
else:
pass
解决方案
您可以使用字典或关键字解包,如下所示:
my_dict = {"source": "table", "string": "abc", "date": "2020-01-01",
"date1": "2020-01-02"}
sql = '''SELECT DISTINCT a, b AS value
FROM ${source}
WHERE b IN (${string})
AND slice_start >= ${date}
AND slice_start <= ${date1};'''
sql.format(**my_dict)
结果:
In [32]: from pprint import pprint
In [33]: pprint(sql.format(**my_dict))
('SELECT DISTINCT a, b AS value FROM $table WHERE b IN ($abc) AND slice_start '
'>= $2020-01-01 AND slice_start <= $2020-01-02;')
推荐阅读
- javascript - 在 Chrome 上的 Web Serial API 中获取连接设备的名称
- node.js - 检索使用 Microsoft Identity 连接到 Azure 应用服务的用户的电子邮件
- node.js - 类型错误:预期图像或画布
- jquery - 光滑轮播中的图像不会第一次出现
- php - 在mysql中链接外键时出错
- sql - 订购并制作独特的列
- php - 如何在 PHP 中 $_POST 动态分配的值?
- r - 改组R中的列时如何排除特定值?
- java - 使用 javax.accessibility 与来自另一个 JVM 的应用程序交互
- java - 如何调试错误:java.lang.AssertionError: No value at JSON path "$.name"