django 如何在 SQLite 中删除列

Posted

技术标签:

【中文标题】django 如何在 SQLite 中删除列【英文标题】:How django drops column in SQLite 【发布时间】:2021-08-02 04:16:20 【问题描述】:

不要混淆。我询问如何在 Django 中删除列。我的问题是 Django 从 SQLite 数据库中删除列的实际操作

最近我看到一篇文章说你不能在 SQLite 数据库中删除列。所以你必须删除表并重新创建它。很奇怪,如果 SQLite 不支持,那么 Django 是如何做到的?

是在做this吗?

【问题讨论】:

【参考方案1】:

要删除 SQLite 数据库中的列,Django 遵循此处描述的过程:https://www.sqlite.org/lang_altertable.html#caution

简单来说就是新建表,从旧表复制数据,删除旧表,然后重命名新表。

从source code [GitHub] 我们可以看到SQLite 的模式编辑器在remove_field 方法中调用self._remake_table(model, delete_field=field),这是用于删除列的方法。方法_remake_table 在它的code 中有以下文档字符串,它描述了该过程是如何执行的:

将模型从 old_model 转换为 new_model 的快捷方式 遵循正确的程序来执行非重命名或列添加 基于 SQLite 文档的操作 https://www.sqlite.org/lang_altertable.html#caution 必备 步骤是:

    使用更新后的定义创建一个名为“new__app_model”的表 将现有“app_model”表中的数据复制到新表中 删除“app_model”表 将“new__app_model”表重命名为“app_model” 恢复之前“app_model”表的任何索引。

【讨论】:

以上是关于django 如何在 SQLite 中删除列的主要内容,如果未能解决你的问题,请参考以下文章

如何在HTML5中获取并打印表的多个列? (django,sqlite,html5)

如何从 DJango 的 SQLite3 中删除表?

如何在django中删除具有重复列的行

SQLite如何从分隔列文本中对另一个表中的值求和?

如何将 Django 模型从 mysql 迁移到 sqlite(或在任何两个数据库系统之间)?

如何使用 sqlite 中的视图在特定行中添加列?