我从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_interface
。id
,dd_interface
。dd_interface_id
,
......... FROM dd_interface
WHERE dd_interface
。dd_interface_id
=(
选择
U0。id
从
dd_interface_extend
U0
哪里
U0。C_INTERFACE
LIKE' ORACLE.1123.sdas'
限制1)订购dd_interface
。SEQ
ASC
在Django 1.8中使用" IN" MySql 5.X不支持的子句。
选择
dd_interface
。id
,
dd_interface
。dd_interface_id
,
从
dd_interface
哪里
(dd_interface
。dd_interface_id
)IN(
选择
U0。id
从
dd_interface_extend
U0
哪里
U0。C_INTERFACE
LIKE' ORACLE.1123.sdas'
限制1)
ORDER BY dd_interface
。SEQ
ASC
我如何通过这个问题? (抱歉我的英语不好)
答案 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。