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 优缺点比较 不一定哪一种效率高 具体要看情况