创建现有数据库的 Django 模型
数据库设置
Django inspectdb 命令
inspectdb 的更多选项
要点回顾
这是一个自动生成的 Django 模型模块。
您需要手动执行以下操作来清理此问题:
* 重新排列模型顺序
* 确保每个模型都有一个 primary_key=True 的字段
* 确保每个外键都已on_delete设置为所需的行为。
*managed = False如果您希望允许 Django 创建、修改和删除表,请删除以下行。
您可以随意重命名模型,但不要重命名数据库表的值或字段名称。
Django 以其高效的 ORM 功能而闻名。我们经常会遇到需要将现有数据库集成到新的后端框架的情况。而实现这一目标的第一步通常是(对于支持 ORM 的框架而言)创建数据库模型。本文将介绍如何创建现有数据库的 Django 模型。
数据库设置
将 Django 集成到旧数据库中是完全可行的。第一步是在配置文件中设置 Django 与现有数据库的连接settings.py。
Django inspectdb 命令
在 Django 中设置好数据库连接后,就可以自动生成模型了。没错,你没听错!Django 提供了一个实用工具,可以通过inspectdb命令行从现有数据库自动生成模型。
您可以通过执行以下命令,利用内省功能创建现有数据库模型:
$ python manage.py inspectdb
上述命令会将 Django 可以根据现有数据库创建的所有模型输出到标准输出(stdout)。您可以使用标准的 Unix 输出重定向将其保存为文件:
$ python manage.py inspectdb > models.py
输出文件将保存到当前目录。将该文件移动到正确的应用程序中,即可以此为基础进行进一步的自定义。
请记住:运行 `inspect db` 命令之前,需要先运行 Django 项目。
inspectdb 的更多选项
inspectdb默认情况下,不带任何参数的命令会输出数据库中的所有表。如果要查看特定的表,可以在命令后以空格分隔的方式传递表名作为参数:
$ python manage.py inspectdb table1 table2
您可以参考 Django文档了解更多信息。
要点回顾
- 如果
inspectdb无法将列的类型映射到模型字段类型,则会使用TextField 类型,并在生成的模型中该字段旁边插入 Python 注释'This field type is a guess.'。请注意这一点,并根据需要更改字段类型。 -
如果数据库列名是 Python 保留字(例如
pass`__name__`、class`__name__` 或 `__name__`for),inspectdb则会'_field'在属性名后附加 `__name__` 并将该db_column属性设置为实际的字段名(例如 `__name__`、pass`class__name__` 或 ` __name__`for)。
例如,如果一个表有一个INT名为 `__name__` 的列for,则生成的模型将有一个如下所示的字段:for_field = models.IntegerField(db_column='for')inspectdb'Field renamed because it was a Python reserved word.'将在字段旁边插入 Python 注释。 -
如果您的数据库包含引用其他表的表(大多数数据库都是如此),您可能需要重新排列生成的模型的顺序,以便正确排序引用其他模型的模型。
-
defaults当模型字段指定默认值时,Django 不会创建数据库。同样,数据库默认值也不会被转换为模型字段默认值,也不会被以任何方式检测到inspectdb。 -
默认情况下,
inspectdb`creates` 会创建表unmanaged models。也就是说,managed = False在模型Meta类中,`is` 会告诉 Django 不要管理每个表的创建、修改和删除。如果您确实希望 Django 管理表的生命周期,则需要将 `is` 选项更改managed为True`true`(或者直接删除它,因为 `true` 是其默认值)。 -
每个数据库表都会被转换为一个模型类(即,数据库表和模型类之间存在一对一的映射关系)。这意味着您需要将任何多对多连接表的模型重构为
ManyToManyField对象。 -
外键检测仅适用于 PostgreSQL 和某些类型的 MySQL 表。在其他情况下,外键字段将按如下方式生成:
IntegerField's, assuming the foreign-key column was anINT柱子。
此功能旨在提供快捷方式,而非生成最终模型。运行后,您需要自行查看生成的模型并进行自定义。
文章来源:https://dev.to/idrisrampurawala/creating-django-models-of-an-existing-db-288m