zoukankan      html  css  js  c++  java
  • [Django](1093, "You can't specify target table 'fee_details_invoices' for update in FROM clause") 错误

    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()

    有时候是不能看表象的。

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


  • 相关阅读:
    觅踪2
    构建之法阅读笔记08
    觅踪1
    暑期第四周学习周总结
    暑期第三周学习周总结
    暑期第二周学习周总结
    数据库程序设计第九天--整合总结
    数据库程序设计第八天--隔离人员权限
    数据库程序设计第七天--隔离地权限
    数据库程序设计第六天--管理员权限
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5138946.html
Copyright © 2011-2022 走看看