【发布时间】:2020-08-24 20:25:19
【问题描述】:
问题的根源在于糟糕的数据库设计可以追溯到我开始之前很久,但是这个问题不会在一天结束甚至一周结束之前得到解决。因此,我需要找到一种更好的方法来处理以下问题以添加功能。
我不得不偏离 Django ORM,因为我需要围绕 FROM <table> 编写逻辑,因此我需要构建一个原始 SQL 查询。我们选择了这条路线,而不是使用添加的新表每年更新几次models.py。
从here 开始有许多区域,其中 Django 文档说“不要在原始查询中使用字符串格式或在 SQL 字符串中引用占位符!”
如果我这样写查询:
cursor.execute("""
SELECT * \
FROM agg_data_%s \
WHERE dataview = %s \
ORDER BY sortorder """, [tbl, data_view])
它在tbl 周围添加单引号,这显然会导致问题,但会正确构造用单引号括起来的WHERE 子句。
这样做,不会在tbl 周围加上单引号,但会强制你在WHERE 周围加上单引号,这至少可以说是不好的(为SQL 注入打开它):
sql = """ \
SELECT * \
FROM agg_data_%s \
WHERE dataview = '%s' \
ORDER BY sortorder """ % (tbl, data_view)
cursor.execute(sql)
用这些柠檬做柠檬水?
【问题讨论】: