数据库生成列⁽⁹⁾⁽⁹⁾: Django & SQLite

这是一篇关于 Django 5.0 中新增的GeneratedField(生成字段)的介绍文章,主要内容如下:

  • 引入:作者长期认为数据库生成列对 Django 来说是一个杀手级功能,在 Django 5.0 中终于实现,本文分享使用 SQLite 作为数据库后端测试GeneratedField的工作。
  • GeneratedField特性:是全功能字段,可用于查询、显示和索引,值由数据库根据其他字段自动计算,不可设置或修改,定义需指定expression(计算表达式)、output_field(输出字段类型)和db_persist(是否持久化存储)属性。
  • 设置环境:需要 Python 3(测试版本 3.11 - 3.12)、虚拟环境和 Django 5.0(测试版本 5.0)。
  • generatedfields项目和samples应用:创建generatedfields项目和samples应用,激活samples应用并在settings.py中配置。
  • 示例模型及命令:展示了多种使用GeneratedField的示例模型,如计算矩形面积、正方形面积、圆面积、直角三角形面积、商品总价、订单状态、事件日期和持续时间、JSON 键值和拼接字段等,还介绍了一些常用命令(makemigrationssqlmigratemigrateshell)。
  • 参与和资源:鼓励读者参与 Django 开发,报告问题,提供了 GitHub 仓库(github.com/pauloxnet/generatedfields)、Django 文档(GeneratedField - Django documentation)和 SQLite 文档(Generated Columns - SQLite documentation)等资源。
  • 总结和免责声明:生成字段是强大的工具,可带回数据库逻辑,简化不同应用在同一数据库上的协作,未来将展示更多示例,代码仅用于演示,风险自负。

各部分详细内容:

  • TL;DR(重点摘要)GeneratedField是 Django 5.0 的新特性,值由数据库计算,可用于所有支持的后端数据库,示例模型如计算矩形面积的Rectangle模型。
  • Introduction(介绍):阐述对数据库生成列的思考和贡献,以及本文的目的是分享使用GeneratedField的实验。
  • GeneratedField(生成字段):详细介绍GeneratedField的属性、迁移时生成的 SQL 代码等。
  • Set Up(设置):说明实验所需的 Python 版本、虚拟环境和 Django 版本及安装方法。
  • The generatedfields projectgeneratedfields项目):创建generatedfields项目并展示其基本文件结构。
  • The samples appsamples应用):创建samples应用并展示其文件结构。
  • Activating the samples app(激活samples应用):在settings.py中激活samples应用。
  • Sample models(示例模型):展示多种使用GeneratedField的示例模型,包括不同几何形状和商品相关的模型。
  • Useful commands(有用的命令):介绍常用的 Django 管理命令,如生成迁移、查看迁移 SQL 等。
  • A calculated product field(计算乘积字段):以矩形模型为例,展示计算两个字段乘积的生成字段。
  • A calculated exponentiation field(计算幂次方字段):通过正方形模型展示使用数据库函数计算幂次方的生成字段。
  • A calculated geometric formula field(计算几何公式字段):以圆形模型为例,展示使用数据库函数计算几何公式的生成字段。
  • A calculated trigonometric functions field(计算三角函数字段):以直角三角形模型为例,展示使用三角函数的生成字段。
  • A calculated total price field(计算总价字段):在商品模型中展示计算总价的生成字段,包括默认值设置。
  • A calculated status field(计算状态字段):在订单模型中展示使用条件表达式的生成字段。
  • Calculated date and duration fields(计算日期和持续时间字段):在事件模型中展示计算日期和持续时间的生成字段。
  • A calculated JSON key field(计算 JSON 键字段):在包模型中展示从 JSON 数据中提取键值的生成字段。
  • A calculated concatenated field(计算拼接字段):在用户模型中展示拼接两个字段的生成字段,并提及使用时的注意事项。
  • Get involved(参与):邀请读者参与 Django 开发,报告问题。
  • GitHub(GitHub):提供实验代码的 GitHub 仓库地址。
  • Conclusion(结论):总结生成字段的强大功能和带来的好处,以及后续将展示的内容。
  • Disclaimer(免责声明):强调代码仅用于演示,不保证可用于生产环境,使用风险自负。
  • Resources(资源):提供 Django 文档和 SQLite 文档的链接。
  • Updates(更新):记录文章的更新历史,包括改进文本、添加内容等。
阅读 9
0 条评论