[Django](1093, "You can't specify target table。。错误

dele_id = Fee_details_invoices.objects.filter(fee_detail_id__in=fee_id_list, return_type=‘2‘).values_list(‘fee_detail_id‘, flat=True)
Fee_details_invoices.objects.filter(fee_detail_id__in=dele_id).delete()

报错:

django.db.utils.DatabaseError: (1093, "You can‘t specify target table ‘fee_details_invoices‘ for update in FROM clause")

错误分析解决:

第一行代码的意思是获取某些条件行的某个字段

第二行代码去删除这些行包含这个字段值的记录

按照文档第一行代码返回的应该是一个list啊  见文档

>>> Entry.objects.values_list(‘id‘, flat=True).order_by(‘id‘)[1, 2, 3, ...]

第二行代码的输入参数也是一个list啊 见文档

Entry.objects.filter(id__in=[1, 3, 4])

为啥错了呢?

通过debug看到dele_id的结果把

dele_id
[]
type(dele_id)
<class ‘django.db.models.query.ValuesListQuerySet‘>

看到了把,虽然打印出来是个list的样子,其实不是list类型

解决:第二行语句把dele_id强转就行了

Fee_details_invoices.objects.filter(fee_detail_id__in=list(dele_id)).delete()

有时候是不能看表象的。

即使是动态语言,类型不一致也会出现很多坑。

[Django](1093, "You can't specify target table。。错误

时间: 2024-10-13 08:23:06

[Django](1093, "You can't specify target table。。错误的相关文章

[Django](1093, &quot;You can&#39;t specify target table &#39;fee_details_invoices&#39; for update in FROM clause&quot;) 错误

dele_id = Fee_details_invoices.objects.filter(fee_detail_id__in=fee_id_list, return_type='2').values_list('fee_detail_id', flat=True) Fee_details_invoices.objects.filter(fee_detail_id__in=dele_id).delete() 报错: django.db.utils.DatabaseError: (1093, "Y

(原)mysql错误1093 You can&#39;t specify target table &#39;wms_cabinet_form&#39; for update in FROM clause

这个错误的意思是不能先select出同一表中的某些值,再update这个表(在同一语句中),解决方法不直接查询同一个,假设要更新的表为A,则先将A的的数据放到表B,再从表B中查询则得到更新和查询表A的效果 例: 成绩表: 把“SC”表中“姚明”老师教的课的成绩都更改为此课程的平均成绩 update sc set score=(select avg(a.score) FROM (select score,C from sc) a where a.C in (select C from course

关于mysql 5.7版本“报[Err] 1093 - You can&#39;t specify target table &#39;XXX&#39; for update in FROM clause”错误的bug

不同于oracle和sqlserver,mysql并不支持在更新某个表的数据时又查询了它,而查询的数据又做了更新的条件,因此我们需要使用如下的语句绕过: UPDATE teaching_department SET code_year = 2017, notice_code = (SELECT a.code + 1 FROM (SELECT MAX(notice_code) code FROM teaching_department WHERE department_id = 6284 and

mysql - Error Code: 1093. You can&#39;t specify target table

UPDATE card SET value = (SELECT value FROM card WHERE id = 23) WHERE id = 20; 更新时 在where条件里面加入的子查询导致的. 解决方法: UPDATE card SET value = (SELECT val FROM (SELECT value as val FROM card WHERE id = 23)  as temp )WHERE id = 20;使用临时表. mysql - Error Code: 109

MySQL: [Err] 1093 - You can&#39;t specify target table &#39;bk&#39; for update in FROM clause

错误的意思说,不能先select出同一表中的某些值,再update这个表(在同一语句中). 例如下面这个sql: delete from tbl where id in (        select max(id) from tbl a where EXISTS        (            select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1        )        group by tac

[Err] 1093 - You can&#39;t specify target table &#39;master_data&#39; for update in FROM clause

delete from master_data where category_id not in (select category_id from master_data a, bc_category b where a.category_id=b.cate_id) 执行SQL语句时出现这个错误.原因是在更新这个表和数据时又查询了它,而查询的数据又做了更新的条件.以前ORACLE上面没有这个错误. 上面这个语句其实没有写好 不优化了 直接更新 delete from master_data wh

[Django](1093, &amp;quot;You can&amp;#39;t specify target table &amp;#39;fee_details_invoices&amp;#39; for update in FROM clause&amp;quot;) 错误

dele_id = Fee_details_invoices.objects.filter(fee_detail_id__in=fee_id_list, return_type='2').values_list('fee_detail_id', flat=True) Fee_details_invoices.objects.filter(fee_detail_id__in=dele_id).delete() 报错: django.db.utils.DatabaseError: (1093, "Y

MySQL - 1093异常 - You can&#39;t specify target table &#39;t&#39; for update in FROM clause

有一个表示地区的表,表结构与数据大概如下表. ID NAME PARENT_ID 1 中国 2 广东省 1 3 广州市 2 4 荔湾区 3 5 越秀区 3 6 番禺区 3 7 小谷围街道 6 现为了查询方便,需要加一列PARENT_NAME,用以表示上级地区的名称(虽然不符合第三范式,传递依赖,但有时为了业务上的可行性.便利性,可以按实际情况考虑) ID NAME PARENT_ID PARENT_NAME 1 中国 2 广东省 1 3 广州市 2 4 荔湾区 3 5 越秀区 3 6 番禺区 3

MySQL问题:You can&#39;t specify target table &#39;表名&#39; for update in FROM clause

在MySQL中,写SQL语句的时候 ,可能会遇到You can't specify target table '表名' for update in FROM clause这样的错误,它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中). 1.问题是如何出现的? 数据准备 CREATE TABLE T_Person( pId INT PRIMARY KEY AUTO_INCREMENT, pName VARCHAR(20) ); INSERT INTO T_Pe