【发布时间】:2015-07-03 12:31:43
【问题描述】:
res = db.execute("""
SELECT CAST ((SUM(r.SalesVolume)/1000.0) AS decimal(6,1))
FROM RawData r
INNER JOIN Product p
ON r.ProductId = p.ProductId
INNER JOIN Calendar c
ON r.DayId = c.DayId
WHERE c.WeekCodeInYear BETWEEN 1 AND 12
AND
c.YearId = 2014
AND p.Distributor IN (%s)
GROUP BY c.WeekCodeInYear """ % _studios)
_studios 是一个 Python 列表,是 JSON 对象的一部分。可以读作:
["WARNER","TF1","GAUMONT","PATHE","STUDIOCANAL","FRANCETV","M6SND"]
但是,当我尝试执行此操作时,出现错误:
ProgrammingError: (ProgrammingError) (207, "Invalid column name 'u'WARNER', u'TF1',
u'GAUMONT', u'PATHE', u'STUDIOCANAL', u'FRANCETV', u'M6SND''.DB-Lib error message 20018,
severity 16:\nGeneral SQL Server error: Check messages from the SQL
但是,数据库具有指定的所有列。我想这与格式有关。不过不确定。
在命令提示符下打印的查询可以看成:
SELECT CAST ((SUM(r.SalesVolume)/1000.0) AS decimal(6,1))
FROM RawData r
INNER JOIN Product p
ON r.ProductId = p.ProductId
INNER JOIN Calendar c
ON r.DayId = c.DayId
WHERE c.WeekCodeInYear BETWEEN 1 AND 12
AND
c.YearId = 2014
AND p.Distributor IN ([u'WARNER', u'TF1', u'GAUMONT', u'PATHE', u'STUDIOCANAL',
u'FRANCETV', u'M6SND'])
GROUP BY c.WeekCodeInYear
我注意到p.distributor 行中的[ ] 可能是问题?
【问题讨论】:
-
这很容易受到注入攻击,即使在您将列表连接成逗号分隔字符串的“固定”版本中也是如此。使用您的 SQL API 提供的任何参数化查询实现。