图片来源: http://avalonstar.com/journal/2008/the-web-framework-for-ponies/
错误信息如下:
OperationalError: (1093, "You can't specify target table 'xxx' for update in FROM clause")
当使用类似如下代码时,会出现以上问题:
user_ids = User.objects.filter(
pk__gt=10
).values_list('pk', flat=True)
User.objects.filter(id__in=user_ids).update(a=123)
解决办法:将第一个结果转换为列表
user_ids = list(user_ids)
出现问题的原因是,上面报错的代码试图生成这样的 sql 语句:
update user set a=1234 where id in (
select id from user where id > 10
)
这条语句是有问题的。 而修改后的代码生成的 sql 语句是这样的:
update user set a=1234 where id in (
1, 2, 3
)
Comments