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)