django模型层复习(1)

django 模型层

数据库迁移

数据备份

python manage.py dumpdata 应用名字 > 应用名字_data.json

表结构同步

# 首先创建数据库并更新配置
# 数据库名字 数据库用户名 数据库密码
# 在settings.py 完成数据库配置
# 迁移数据库表

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'slave': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'backend',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}

"""
default	是django默认的数据库

slaves	是备份数据库,只有default挂了,才会使用备份数据库

这里面的数据是可以同步的。

"""

# 数据库表结构的同步
python manage.py migrate --run-syncdb  --database slave
* --run-syncdb 表示同步数据库的意思
* --database  同步数据库 目的数据库是什么 slave

数据迁移

#完成以上两部之后,就可以导入数据了
python manage.py loaddata 应用名字_data.json

数据库索引

索引

* 索引会加快数据的检索速度
* 但是会降低 插入 删除 更新的速度

应该被索引的字段

* 需要排序的字段
* 需要比较的字段
* 需要过滤的字段

添加索引的两种方法

# *属性中定义
class User(models.Model):
	nickname = models.CharField(maax_length=256,db_index=True)
	
	
#*模型的Meta属性类
class User(models.Model):
	....
	class Meta:
		indexes = [
            models.Index(fields=['nickname']),
            models.Index(fields=['open_id']),
            # models.Index(fields=['open_id','nickname'])
            # 这个是组合索引
		]

模型更新

python manage.py makemigrations
pythonmanage.py migrate

默认的索引规则

django中
主键和外键都默认是索引

关系映射

三种关系

一对一的关系  OneToOneField
一对多的关系  ForegnKey
多对多的关系  ManyToManyField
from django.db import models


class Wife(models.Model):
    pass

class Husband(models.Model):
    """
    记录删除,对应Wife表,也应该删除
    """
    wife = models.OneToOneField(Mother,on_delete=models.CASCADE) 


class Mother(models.Model):
    pass

class Father(models.Model):
    """
    父亲的模型
    因为一夫一妻制,所以是一对一的关系
    on_delete 级联删除,什么都不做
    因为对于孩子来说,父母是不会改的
    """
    wife = models.OneToOneField(Mother,on_delete=models.DO_NOTHING)
    
class YoungerBrother(models.Model):
    pass
    
class ElderBrother(models.Model):
    # 一对多的关系
    father_id = models.ForeignKey(Father,on_delete=models.DO_NOTHING)
    # 多对多的关系
    younger_brother = models.ManyToManyField(YoungerBrother)

猜你喜欢

转载自blog.csdn.net/sunt2018/article/details/86599651
今日推荐