我做了一个循环来检索条件:
for level in levels:
requete += ' and level_concat like %'+level+'%'
我在查询中提出:
countries = Country.objects.extra(where=['continent_id = "'+continent_id+'"', requete])
我试图在where子句中添加条件,但返回错误:
not enough arguments for format string
尊重的结果:
SELECT * FROM `Country` WHERE country_id = "US-51" AND level_concat LIKE %level_test%
有没有办法将requete
添加到我的'where'子句?
答案 0 :(得分:1)
首先,将关系数据库中的数据保存为“由昏迷连接的[值]列表”并不是一个好习惯 - 您应该为这些值创建一个新表。
尽管如此,即使现在你也可以使用filter()
,而不是extra()
(这应该永远是你的最后手段 - 我没有看到你的其余代码,但如果你没有正确转义levels
值,你甚至可能在这里引入SQL注入漏洞。)
一个安全的,extra()
- 更少代码的示例,完全相同:
from django.db.models import Q
q = Q()
for level in levels:
q &= Q(level_concat__contains=level)
countries = Country.objects.filter(q)
或相同的功能,但行数更少:
from django.db.models import Q
q = (Q(level_concat__contains=l) for l in levels)
countries = Country.objects.filter(*q)
答案 1 :(得分:0)
我认为您需要在查询中转义%
符号:
' and level_concat like %%'+level+'%%'