我有一个列表,并希望通过django原始sql传递.
这是我的清单
region = ['US','CA','UK']
我在这里粘贴原始sql的一部分.
results = MMCode.objects.raw('select assigner, assignee from mm_code where date between %s and %s and country_code in %s',[fromdate,todate,region])
现在它给出了以下错误,当我在django python shell中执行它时
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 1412, in __iter__
query = iter(self.query)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 73, in __iter__
self._execute_query()
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 87, in _execute_query
self.cursor.execute(self.sql, self.params)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/util.py", line 15, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/mysql/base.py", line 86, in execute
return self.cursor.execute(query, args)
File …Run Code Online (Sandbox Code Playgroud) 说我有一个模型:
Class Person(models.Model):
firstname = models.CharField()
lastname = models.CharField()
birthday = models.DateField()
# etc...
Run Code Online (Sandbox Code Playgroud)
并说我有一个2个名字的列表:first_list = ['Bob', 'Rob']我有一个2个姓氏的列表:last_list = ['Williams', 'Williamson'].然后,如果我想选择名字所在的每个人,first_list我可以运行:
Person.objects.filter(firstname__in=first_list)
Run Code Online (Sandbox Code Playgroud)
如果我想选择其姓氏的所有人last_list,我可以这样做:
Person.objects.filter(lastname__in=last_list)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.如果我想同时运行这两个限制,这很容易......
Person.objects.filter(firstname__in=first_list, lastname__in=last_list)
Run Code Online (Sandbox Code Playgroud)
如果我想进行or样式搜索而不是and样式搜索,我可以用Q对象来做:
Person.objects.filter(Q(firstname__in=first_list) | Q(lastname__in=last_name))
Run Code Online (Sandbox Code Playgroud)
但我想到的是一些更微妙的东西.如果我只想返回一个返回名字和姓氏的特定组合的查询集,该怎么办?即我要返回Person的哪些对象(Person.firstname, Person.lastname)是zip(first_names, last_names).即我想找回任何一个名叫鲍勃威廉姆斯或罗伯威廉姆森的人(但不是任何一个名叫鲍勃威廉姆森或罗布威廉姆斯).
在我的实际使用情况,first_list并last_list就都有〜100元.
目前,我需要在Django应用程序中解决此问题.但我也很好奇在更一般的SQL上下文中处理这个问题的最佳方法.
谢谢!(如果我能说清楚的话,请告诉我.)