【发布时间】:2021-12-01 11:19:31
【问题描述】:
我正在使用 Python 进行编码。我有这样的查询:
SELECT device_os, count(*) FROM warehouse WHERE device_year <= 2016 GROUP BY device_os;
现在,我有一些来自用户的动态过滤器。例如,
device_id IN (15, 85, 65) OR device_model in ('MAX', 'SHARP', 'AD')
我有这些额外的条件要应用于查询。所以,最终的查询应该变成:
SELECT device_os, count(*) FROM warehouse WHERE device_year <= 2016 AND (device_id IN (15, 85, 65) OR device_model in ('MAX', 'SHARP', 'AD')) GROUP BY device_os;
我搜索过sqlparse,但没有成功。我怎样才能让它看起来像我想要的那样?
【问题讨论】:
-
你需要澄清这里的障碍,不清楚为什么你不能只使用最终查询?前任。输入清理、字符串格式化等
-
@talfreds 因为基本查询已经保存在某个地方,我需要在 where 子句中添加额外的过滤器,这些过滤器会动态出现。确保用户不会输入任何恶意输入。用户没有对数据库的直接控制权。
-
我认为您可以选择解析用户文本(或使其成为
field+list of values而不是整个表达式,那么它应该很容易),或者使用有限的用户只有SELECT ON db.warehouseprivs(限制够不够?)。
标签: python mysql sql sql-parser