将列表转换为元组在Postgres中可以正常工作,尽管在sqlite3下相同的代码
DatabaseError: near "?": syntaxerror也会失败,因此看来这是后端特定的。您的代码行将变为:
results = MMCode.objects.raw('select assigner, assignee from mm_pre wheredate between %s and %s and country_pre in%s',[fromdate,todate,tuple(region)])我在一个干净的Django 1.5.1项目上用bar / models.py中的以下代码对此进行了测试:
from django.db import modelsclass MMCode(models.Model): assigner = models.CharField(max_length=100) assignee = models.CharField(max_length=100) date = models.DateField() country_pre = models.CharField(max_length=2)
然后在外壳上:
>>> from datetime import date>>> from bar.models import MMCode>>> >>> regions = ['US', 'CA', 'UK']>>> fromdate = date.today()>>> todate = date.today()>>> >>> results = MMCode.objects.raw('select id, assigner, assignee from bar_mmpre where date between %s and %s and country_pre in %s',[fromdate,todate,tuple(regions)])>>> list(results)[](请注意,查询行在此处稍作更改,以使用Django创建的默认表名,并
id在输出中包括该列,以便ORM不会抱怨)



