codecamp

Django4.0 迁移-后端支持

所有 Django 支持的数据库后端都支持迁移,还有些支持表修改(通过 SchemaEditor 类实现)的第三方后端也支持。

然而,有些数据库在表结构变更方面比其它数据库更强;下面介绍一些注意事项。

PostgreSQL

PostgreSQL 在架构支持方面是所有数据库中是最强的。
唯一需要注意的是,在 PostgreSQL 11 之前,添加具有默认值的列会导致表的完全重写,时间长短与表的大小成正比。 因此,建议你始终使用 ​null=True​ 创建新列,因为这样可以立即添加它们。

MySQL

MySQL 缺乏对架构变更操作相关事务的支持,这意味着如果迁移失败,你将必须手动取消更改才能重试(无法回滚到较早的时间)。

此外,MySQL 几乎每一次架构操作都会完全重写表,一般来说,增加或删除列需要的时间与表的行数成正比。在速度较慢的硬件上,这可能比每百万行一分钟还要糟糕——在一个只有几百万行的表中添加几列,可能会让你的网站锁定十几分钟。

最后,MySQL 对列、表和索引的名称长度有相对较小的限制,并且对索引涵盖的所有列的组合大小也有限制。 这意味着在其他后端上创建的索引将可能无法在 MySQL 下创建。

SQLite

SQLite 几乎没有内置的架构更改支持,因此 Django 尝试通过以下方式对其进行模拟:

  • 使用新架构创建新表
  • 复制数据
  • 删除旧表
  • 重新命名新表,使之与原表名相匹配。
此过程一般工作的很好,但它可能很慢,偶尔也会出现问题。除非你非常清楚风险和它的局限性,否则不建议你在生产环境中运行和迁移 SQLite;Django 自带的支持是为了让开发人员在本地计算机上使用 SQLite 来开发较不复杂的 Django 项目,而无需完整的数据库。


Django4.0 迁移-命令
Django4.0 迁移-工作流程
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Django4.0 模型和数据库

Django4.0 处理HTTP请求

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }