Django框架中models.py和数据库之间的迁移操作

Django框架中的models.py文件与数据库表存在对应关系,可以修改models文件后可以执行命令,更新数据库表结构,同样也可以通过执行命令,根据数据库表结构,更新models文件

Django框架中models.py和数据库之间的迁移操作

从models.py文件到数据库

将models文件中声明的class及其属性,在数据库中创建相应的表和字段与之对应。
首先,生成迁移文件。

#不指定应用名,工程下的所有应用都会生成迁移文件
python manage.py makemigrations
#指定应用名,只针对指定的应用生成迁移文件
python manage.py makemigrations appname

然后,将迁移文件,迁移至数据库。

#工程下所有迁移文件都被使用
python manage.py migrate
#使用指定应用下的迁移文件
python manage.py migrate appname

从数据库到models.py

  • 不指定应用
python manage.py inspectdb
  • 迁移到指定应用下的models.py文件中
python manage.py inspectdb > appname/models.py

注意事项

  • 在首次执行迁移命令时,数据库中会创建名为django_migrations的表,如果在数据库中手动修改了迁移生成的数据库表,再次执行迁移命令,不会再重新创建出表。这时,需要删除或者truncate 表django_migrations,重新执行迁移命令即可。
### Django `models.py` 文件用法 #### 定义数据模型 在Django框架内,`models.py`文件用于定义应用程序的数据模型。每一个模型都是一个Python类,继承自`django.db.models.Model`。通过这种方式,可以利用Django内置的对象关系映射(ORM)功能自动管理数据库表结构以及提供一系列便捷的方法来进行增删改查等操作[^2]。 ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) pub_date = models.DateField() ``` 上述代码片段展示了如何在一个名为Book的应用程序中定义书籍的信息模型,其中包含了书名(title),作者(author), 出版日期(pub_date)。 #### 数据库字段类型 为了适应不同类型的数据存储需求,Django提供了多种字段类型供开发者选择。例如: - CharField:用于保存较短字符串。 - TextField:适合较长文本内容。 - IntegerField:整数型数值。 - DateField/DateTimeField:分别表示日期时间戳。 - ForeignKey:建立与其他表格之间的关联关系[^3]。 对于外键类型的设置,在实际开发过程中非常常见,比如下面的例子说明了一个应用之间的一对多关系: ```python class Review(models.Model): book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name="reviews") reviewer_name = models.CharField(max_length=80) review_text = models.TextField() rating = models.IntegerField() ``` 这里Review模型中的book属性就是一个指向Book实例的外键,意味着每条评论都属于某本书籍,并且当删除一本书时也会级联删除其所有的评论记录。 #### 自动生成 Models 如果已经存在现成的关系型数据库而想要快速构建对应的Django项目,则可以通过命令行工具让Django根据现有的SQL模式来自动生成相应的model类。具体做法如下所示: ```bash python manage.py inspectdb > bookstore/models.py ``` 这条指令将会读取当前连接到项目的默认数据库配置并尝试解析所有找到的表格信息转换为合适的Django model语法写入指定的目标文件中去[^1]。 #### 对数据库执行迁移 每当修改了任何有关于数据库架构的内容之后——无论是新增加了一张新表还是调整现有列的名字或约束条件等等,都需要运行以下两条命令之一来同步这些更改至真实的物理层面上: ```bash python manage.py makemigrations python manage.py migrate ``` 前者负责收集所有未被追踪过的变更项打包成一次性的版本控制单元;后者则是真正地把这些改动应用到了所使用的RDBMS之上[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值