Django子查询错误

时间:2015-11-20 17:33:56

标签: python mysql django django-1.8 django-1.4

我从Django 1.4迁移到Django 1.8,现在我遇到了一个我不知道如何解决的问题。

当我跑步时:

dd_interface =  D_Interface.objects.filter(C_INTERFACE__iexact=interface.c_interface)[:1]
    campos = DD_Interface_Campos.objects.filter(dd_interface = dd_interface).order_by('SEQ')

我收到错误:

  

NotSupportedError(1235,"这个版本的MySQL还没有支持' LIMIT& IN / ALL / ANY / SOME子查询'")

在Django 1.4中。在BD(MySQL)中执行的查询是:

SELECT dd_interfaceiddd_interfacedd_interface_id,     ......... FROM dd_interface WHERE dd_interfacedd_interface_id =(        选择            U0。id        从            dd_interface_extend U0        哪里            U0。C_INTERFACE LIKE' ORACLE.1123.sdas'        限制1)订购dd_interfaceSEQ ASC

在Django 1.8中使用" IN" MySql 5.X不支持的子句。

选择     dd_interfaceid,     dd_interfacedd_interface_id, 从     dd_interface 哪里     (dd_interfacedd_interface_id)IN(         选择             U0。id         从             dd_interface_extend U0         哪里             U0。C_INTERFACE LIKE' ORACLE.1123.sdas'         限制1) ORDER BY dd_interfaceSEQ ASC

我如何通过这个问题? (抱歉我的英语不好)

1 个答案:

答案 0 :(得分:0)

好吧,我开始研究Django,在阅读文档时,我找到了一种用Manager.raw执行原始查询的方法。

所以,基本上,我们可以这样做:

>>> foo_raw_queryset = Foo.objects.raw("select * from myapp_foo")
>>> foo_raw_query_set  # needs some list comprehension
<RawQuerySet: select * from myapp_foo>
>>> foo_list = [f for f in foo_raw_queryset] # will return a model object list
>>> foo_list
[<Foo: um>, <Foo: dois>]

因此,我不知道它是不是像您这样的问题的最佳解决方案,但您可以在没有IN声明的情况下运行自定义查询,并避免出现错误。面向MySQL。