常用字段

注意:

Django中没有设置对应char类型的字段,但可以支持自己定义。

自定义对应于数据库的char类型字段:

from django.db.models import Field

class RealCharField(Field):
'''
自定义的char类型字段
'''
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):
'''
限定生成的数据库字段类型char,长度为max_length指定的值
:param connection:
:return:
'''
return 'char(%s)'%self.max_length class Movie(models.Model):
textField = RealCharField(max_length=64)

自定义char字段

常用字段列举

AutoField(primary_key=True)  # int自增列,主键字段

CharField(max_length=32)   # 对应数据库中的varchar字段,必须提供max_length参数, max_length表示字符长度

IntegerField()           int

BigIntegerField()         bigint

DecimalField()          decimal

EmailField()           varchart(254)

DateField()         # 年月日

DateTimeField()       # 年月日时分秒

BooleanField(Field)          # 给该字段传布尔值 会对应成  数字0/1

TextField(Field)            # 文本类型

FileField(Field)           # 路径保存在数据库,文件上传到指定目录
     # upload_to = '指定文件路径'
     # 给该FileField字段传文件对象 文件会自动保存到upload_to指定的文件夹下 然后该字段存文件的路径

常用字段参数

null  # 用于表示某个字段可以为空。

unique  #如果设置为unique=True 则该字段在此表中必须是唯一的 。

db_index  #如果db_index=True 则代表着为此字段设置索引。

default   #为该字段设置默认值。

DateField和DateTimeField字段参数

auto_now_add  #配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。

auto_now    #配置上auto_now=True,每次更新数据记录的时候会更新该字段。

外键字段参数

外键类型在ORM中用来表示外键关联关系

to     #设置要关联的表

to_field     #设置要关联的表的字段

Choice参数

如性别,学历,婚否等一些数据能够被你列举完全  你就可以考虑使用choices参数

class Userinfo(models.Model):
username = models.CharField(max_length=32)
gender_choices = (
(1, '男'),
(2, '女'),
(3, '其他'),
)
gender = models.IntegerField(choices=gender_choices)
#该字段还是存数字,还可以存匹配关系之外的数字

数据库查询优化

only()与defer()

only():括号内传字段 得到的结果是一个列表套数据对象,该对象内只含有括号内指定的字段。
对象点该字段属性是不会走数据库查询的,但是你一旦点了非括号内的字段,也能够拿到数据,但是是重新走的数据库查询

    res = models.Book.objects.only('title') #这些对象内部只有title属性
for r in res:
print(r.title) #不走数据库查询
print(r.price) #走数据库查询

defer():与only相反,括号内传字段 得到的结果是一个列表套数据对象,该对象内没有括号内指定的字段属性,对象点该字段属性会重复走数据库,但是你一旦点了非括号内的字段,就不走数据库查询了。

    res = models.Book.objects.defer('title')  # defer与only互为反关系
for r in res:
print(r.title) #走数据库查询
print(r.price) #不走数据库查询

select_related和prefetch_related

select_related内部是链表操作,会将关系表全部连接起来拼成一个大表,之后一次性查询出来,把所有数据都封装到一个对象中。
数据对象再获取任意表中的数据的时候都不需要再走数据库了,因为全部封装成了对象的属性。

    res = models.Book.objects.select_related('publish')
for r in res:
print(r.publish.name)
'''
select_related括号内只能传外键字段,并且不能是多对多字段,只能是一对一和一对多字段
select_related(外键字段1__外键字段2__外键字段3)
'''

prefetch_related内部是子查询,但是给你的感觉是链表操作。

内部通过子查询将外键关联表中的数据也全部给你封装到对象中,之后对象点当前表或外键关联表中的字段也都不需要走数据库了

两者优缺点比较:

select_related链表操作,优势在于只走一次sql查询,耗时耗在连接表的操作

prefetch_related子查询,走两次sql查询,耗时耗在查询次数

Django orm开启事务操作

事务的定义:将多个sql语句操作变成原子性操作,要么同时成功,有一个失败则里面回滚到原来的状态,保证数据的完整性和一致性

事务的四大特性(ACID):
  原子性:事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。
  一致性:事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。
  隔离性:指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。
  持久性:指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响

# django orm 开启事务操作    
from django.db import transaction
with transaction.atomic():
#在with代码块中执行的orm语句同属于一个事务
pass
#代码块运行结束,事务就结束了

MTV与MVC模型

MTV django 号称是MTV框架

M:models
T:templates
V:views

MVC

M:models
V:views
C:contronner 控制器(路由分发 urls.py)

MVC模型是一种使用 Model View Controller( 模型-视图-控制器)设计创建 Web 应用程序的模式。

Model(模型):是应用程序中用于处理应用程序数据逻辑的部分。
    通常模型对象负责在数据库中存取数据。

View(视图):是应用程序中处理数据显示的部分。
    通常视图是依据模型数据创建的。

Controller(控制器):是应用程序中处理用户交互的部分。
    通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MTV模型
FLask用的是MTV的模式
所谓的MTV ( Model–Template–View ),翻译一下就是模型、模板、视图。
一般是用户通过浏览器向我们的服务器发起一个请求(request),
这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

Django常用字段及参数、事务、数据库查询优化的更多相关文章

  1. ORM中聚合函数、分组查询、Django开启事务、ORM中常用字段及参数、数据库查询优化

    聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的 ...

  2. Django 常用字段和参数

    一.ORM字段 类型 说明 AutoField 一个自动增加的整数类型字段.通常你不需要自己编写它,Django会自动帮你添加字段:`id = models.AutoField(primary_key ...

  3. Django --- 常用字段及参数

    1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...

  4. Django创建数据库常用字段及参数

    Django创建数据库常用字段及参数 常用字段 1.models.AutoField 自增列= int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列 ...

  5. Django ORM中常用字段和参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

  6. Django ORM 常用字段和参数

    Django ORM 常用字段和参数 一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. I ...

  7. Django框架 之 ORM 常用字段和参数

    Django框架 之 ORM 常用字段和参数 浏览目录 常用字段 字段合集 自定义字段 字段参数 DateField和DateTimeField 关系字段 ForeignKey OneToOneFie ...

  8. Django框架(十一)—— 常用字段、参数、元信息、多对多关联关系

    目录 常用字段和参数 一.ORM字段 二.ORM参数 三.关系字段 1.ForeignKey 2.OneToOneFiled 3.ManyToManyField 四.元信息 五.多对多关联关系的三种方 ...

  9. day07 ORM中常用字段和参数

    day07 ORM中常用字段和参数 今日内容 常用字段 关联字段 测试环境准备 查询关键字 查看ORM内部SQL语句 神奇的双下划线查询 多表查询前提准备 常用字段 字段类型 AutoField in ...

随机推荐

  1. Spark-shell批量命令执行脚本

    #!/bin/bash source /etc/profile exec $SPARK_HOME/bin/spark-shell --queue tv --name spark-sql-test -- ...

  2. H3C 常用接口和线缆

  3. oracle等式比较和范围比较

    当WHERE子句中有索引列, ORACLE不能合并它们,ORACLE将用范围比较. 举例: DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引. SELECT ENAME FROM ...

  4. iptables禁止强制访问指定的站点

    要使192.168.52.0/24网络内的计算机(这此计算机的网关应设为192.168.52.10)强制访问指定的站点,在做为防火墙的计算机(192.168.52.10)上应添加以下规则: 1. 打开 ...

  5. Project Euler Problem 7-10001st prime

    素数线性筛 MAXN = 110100 prime = [0 for i in range(210000)] for i in range(2,MAXN): if prime[i] == 0: pri ...

  6. springboot整合mybatis完整示例, mapper注解方式和xml配置文件方式实现(我们要优雅地编程)

    一.注解方式 pom <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId& ...

  7. 报错:org.springframework.beans.factory.BeanCreationException

    报错码为以下内容,把自己走的坑贴出来,免得大家如同样的坑.以下解决方法仅供参考. ERROR [RMI TCP Connection(3)-127.0.0.1] - Context initializ ...

  8. H3C 什么是OSPF

  9. 【a403】遍历树问题

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 我们都很熟悉二叉树的前序.中序.后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历, ...

  10. el-table翻页序号不从1开始(已解决)

    法一:赋值方式(亲测有效) <el-table-column type="index" fixed="left" align="center&q ...