django orm 之makemigrations和migrate命令

makemigrations:将模型的更改生成迁移脚本文件。模型所在的app,必须放在settings.py中的INSTALLED_APPS列表中。这个命令有以下几个常用选项:

  1、app_label:后面可以跟一个或者多个app,那么就只会针对这几个app中模型的变化生成迁移脚本。如果没有任何的app_label,默认会检查INSTALLED_APPS中所有的app下的模型,针对每一个app中models的改变都生成相应的迁移脚本,注意生成的这些个迁移脚本文件都存放在各个app下的migrations下。

  2、--name:给这个迁移脚本指定一个名字,如果不指定名字,那么生成的脚本文件的名称将会不那么见名知意。

  3、--empty:生成一个空的迁移脚本。如果你想写自己的迁移脚本,可以使用这个命令来实现一个空的文件,然后自己再在文件中写迁移脚本。

 

migrate:将新生成的迁移脚本,映射到数据库中,创建新的表或者修改表的结构。执行python manage.py migrate命令会执行两个步骤:

  1、执行对应app(默认为INSTALLED_APPS下所有的app,当然也可以指定app名称)下的migrations文件夹下的迁移脚本文件并映射到数据表,除了第一个迁移脚本文件没有依赖,其余的迁移脚本文件都会依赖前一个,在执行迁移脚本文件的时候,django首先会检查'django_migrations'表中的记录,执行指定的迁移脚本(默认为最新的,可以指定app和迁移脚本文件版本名称),会依次执行它依赖的迁移脚本文件,直到这个依赖已经执行过了(会在'django_migrations'有记录)

  2、将已经执行的迁移脚本文件记录在django默认生成的'django_migrations'表中

app_label:将某个app下的迁移脚本映射到数据库中。如果没有指定,那么会将所有在INSTALLED_APPS中的app下的模型都映射到数据库中。
app_label migrationname:将某个app下指定名字的migration文件映射到数据库中。

执行migrate命令可能会报错,报错的主要原因是数据库的'django_migrations'表中的迁移版本与对应数据表中的数据表结构生成所需的迁移脚本相冲突。下面两个命令是解决报错的可用方法:

  1、--fake:可以将指定的迁移脚本名字添加到数据库中。但是并不会把迁移脚本转换为SQL语句,修改数据库中的表。使用与数据表结构所需迁移脚本比已执行的迁移脚本超前。
  2、--fake-initial:将第一次生成的迁移文件版本号记录在数据库中。但并不会真正的执行迁移脚本。使用于迁移脚本文件缺少并且很乱,可以把表的结构与models里的结构弄一致,删除所有迁移脚本,清空所有这个app相关的'django_migrations'数据。执行makmigrations,然后执行--fake-initial,继续正常的些其他表内容

showmigrations:查看某个app下的迁移文件。如果后面没有app,那么将查看INSTALLED_APPS中所有的迁移文件。

sqlmigrate:查看某个迁移文件在映射到数据库中的时候,转换的SQL语句

转载于:https://www.cnblogs.com/limaomao/p/9446091.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django ORM(对象关系映射)是Django框架的核心组成部分,它允许开发人员使用Python对象来表示数据库中的数据。以下是Django ORM用法的一些示例: 1. 定义模型类 要使用Django ORM,需要定义一个模型类来表示数据库中的表。模型类必须继承自`django.db.models.Model`,并定义每个字段的类型和属性。 ```python from django.db import models class Person(models.Model): name = models.CharField(max_length=50) age = models.IntegerField() email = models.EmailField() ``` 2. 创建表格 创建数据库表格是使用Django ORM的一个常见任务。可以使用以下命令创建表格: ```bash python manage.py makemigrations python manage.py migrate ``` 这将创建一个迁移文件并将其应用于数据库。 3. 插入数据 要向表中插入数据,可以创建一个模型类实例并调用`save()`方法。 ```python person = Person(name='John', age=30, email='john@example.com') person.save() ``` 4. 查询数据 使用`objects`属性可以查询模型类的所有实例。可以使用`all()`方法获取所有实例,也可以使用`filter()`方法根据条件过滤实例。 ```python # 获取所有实例 people = Person.objects.all() # 根据条件过滤实例 young_people = Person.objects.filter(age__lt=30) ``` 5. 更新数据 可以使用`save()`方法更新模型类实例的属性。 ```python person = Person.objects.get(name='John') person.age = 31 person.save() ``` 6. 删除数据 可以使用`delete()`方法删除模型类的实例。 ```python person = Person.objects.get(name='John') person.delete() ``` 这些是Django ORM的一些常见用法。Django ORM还包括其他高级功能,如聚合、注释和连接查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值