我有Room个对象的30个实例,即数据库表中的30行.

在Python代码中,我有Room.objects.all().delete()个.

我看到Django ORM将其转换为以下PostgreSQL查询:DELETE FROM "app_name_room" WHERE "app_name_room"."id" IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30).

为什么Django ORM不使用更简洁的DELETE FROM app_name_room查询?有没有办法切换到它并避免列出所有ID?

推荐答案

有趣的问题.这让我思考,所以我更深入了一点.主要原因可能是使用DELETE FROM app_name_room无法处理级联删除

然而,回答你的问题

有没有办法切换到它并避免列出所有ID?

您可以使用私有方法_raw_delete来实现这一点.例如:

objects_to_delete = Foo.objects.all()
objects_to_delete._raw_delete(objects_to_delete.db)

这将执行以下查询:

DELETE FROM "objects_to_delete"

PS:根据function docstring:

删除在单个直接SQL查询中从给定查询集中找到的对象.没有信号发送,也没有级联保护.

Python相关问答推荐

@Property方法上的inspect.getmembers出现意外行为,引发异常

try 与gemini-pro进行多轮聊天时出错

我从带有langchain的mongoDB中的vector serch获得一个空数组

使用numpy提取数据块

韦尔福德方差与Numpy方差不同

使用索引列表列表对列进行切片并获取行方向的向量长度

pandas滚动和窗口中有效观察的最大数量

如何获取numpy数组的特定索引值?

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

使用密钥字典重新配置嵌套字典密钥名

改进大型数据集的框架性能

Plotly Dash Creating Interactive Graph下拉列表

判断solve_ivp中的事件

如何更改groupby作用域以找到满足掩码条件的第一个值?

OpenGL仅渲染第二个三角形,第一个三角形不可见

使用polars. pivot()旋转一个框架(类似于R中的pivot_longer)

高效生成累积式三角矩阵

我如何处理超类和子类的情况

与同步和异步客户端兼容的Python函数

普洛特利express 发布的人口普查数据失败