54.1 Django (models) 常用字段及参数 数据库查询优化 事物

models 常用字段和参数

models中的常用字段
	AutoField(primary_key=True)  主键字段    如果没有主键字段django会自动创建一个id 为主键字段
	CharField(max_length=32)     varchar(32)
	IntegerField()               int
	BigIntergerField()           bigint
	DecimalField()               decimal
	EmailField()                 varchart(254)
	DateField()					 date
	DateTimeField()              datetime
		auto_now:每次编辑数据的时候都会自动更新该字段时间
		auto_now_add:创建数据的时候自动更新 
	BooleanField(Field)
		给该字段传布尔值 会对应成  数字0/1
		is_delete
		is_status
		is_vip
	TextField(Field)
        - 文本类型
		存储大段文本
	FileField(Field)
        - 字符串,路径保存在数据库,文件上传到指定目录,只存文件路径
		upload_to = '指定文件路径'
		给该字段传文件对象 文件会自动保存到upload_to指定的文件夹下 然后该字段存文件的路径
		
	
	
	如何自定义char类型字段
		from django.db.models import Field


		class RealCharField(Field):
			def __init__(self,max_length,*args,**kwargs):
				self.max_length = max_length  # 拦截一个父类的方法 操作完之后 利用super调用父类的方法
				super().__init__(max_length=max_length,*args,**kwargs)


			def db_type(self, connection):
				return 'char(%s)'%self.max_length
		
		class Movie(models.Model):
			textField = RealCharField(max_length=64)
字段内的关键性参数
null
default
uique = True
db_index = True


django 1.x默认就是级联更新级联删除 django2.x需要你自己手动指定
on_delete = models.CASCADE
db_contraints = True

字段chices参数

 

 

 

 

 

自定义字段类型   继承的本质:拦截父类方法  调用父类__init__ 方法生成对象,可以确定父类中有max_length属性

 

对象进行sql操作  打印sql语句的配置

直接在setting文件中加入  如下语句即可

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

 

 

 

 

数据库查询优化

 

 only 与 defer

 

 

 

 

 

select_related  与  prefetch_related  

 

 

 

 

 select_related 与 prefetch_related  优缺点比较   不一定哪一种效率高  具体要看情况

 

 

 

 

  

posted @ 2020-01-09 17:21  躺云飘  阅读(183)  评论(0编辑  收藏  举报