zoukankan      html  css  js  c++  java
  • CSIC_716_2020109【Django入门---models中的常用字段、字段内的关键字参数、数据库优化查询、开启事务】

    常用字段

    AutoField(primary_key=True)  主键字段
    
    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
    

      

    choices参数

    类似于枚举:
    先定义一个大元组gender_choice代表可以选择的范围,大元组里套若干个小元组,小元组里放两个元素,第一个是存数据库的值,第二个是展示到前端的值。
    定义字段(gender)的时候,里面用字段choices代表可以选择的值,

    如gender = models.CharField(max_length = 32, choices = gender_choice)。

    取值的时候    对象.get_xxx_display()   如:user_obj.get_gender_display() 

    choices参数
    用户的性别
    学历
    婚否
    在职状态
    客户来源
    当你的数据能够被你列举完全
    你就可以考虑使用choices参数
    
    
    class Userinfo(models.Model):
        username = models.CharField(max_length=32)
        gender_choices = (
            (1, '男'),
            (2, '女'),
            (3, '其他'),
        )
        gender = models.IntegerField(choices=gender_choices)
        # 该字段还是存数字 并且可以匹配关系之外的数字
        record_choices = (('checked', "已签到"),
                          ('vacate', "请假"),
                          ('late', "迟到"),
                          ('noshow', "缺勤"),
                          ('leave_early', "早退"),
                          )
    
        record = models.CharField("上课纪录", choices=record_choices, default="checked", max_length=64)
    
    
    user_obj = models.Userinfo.objects.get(pk=1)
    print(user_obj.username)
    print(user_obj.gender)
    # 针对choices参数字段 取值的时候   get_xxx_display()
    print(user_obj.get_gender_display())
    # 针对没有注释信息的数据  get_xxx_display()获取到的还是数字本身
    user_obj = models.Userinfo.objects.get(pk=4)
    print(user_obj.gender)
    print(user_obj.get_gender_display())
    

      

    数据库优化查询

    defer延期,括号内的延期取

    only只有,只取括号内的

    select_related与prefetch_related

    select_related(连表操作)

    select_related   会进行连表操作,连接所有有关系的表,并只查询一次。得到相关表的所有字段信息封装到结果对象中。以后需要查属性只需要通过句点符就行,不再进行数据库查询。

    select_related()的括号内只能传外键字段,并且不能是多对多的外键

    select_related(外键1__外键2__外键3),通过外键可以无限连表。

    prefetch_related(子查询)   prefetch数据预取

    内部通过子查询的方式(因为数据库语句会执行两(多)次,将第一条的结果作为第二条语句的条件),将外键相关的表和本表中所有的字段存到结果对象中,取值也只需要通过句点符取值。

    多对对的外键只能通过这种方式

    https://www.cnblogs.com/tuifeideyouran/p/4232028.html

    django orm开启事务操作

    事务的四大特性 acid

    原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

    数据库中开启事务

    try: 
        sql语句代码块
    except 异常: 
        rollback; 
    else:  
        commit;
    

      

    数据库的三大范式设计:

    第一范式(NF1):每个字段要有原子性,不可再分割
    
    第二范式(NF2):每个字段与主键要有相关性。
    
    第三范式(NF3):每个字段与主键要直接相关,而不是间接相关
    

     

    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:controller 控制器(路由分发 urls.py)
    本质:MTV本质也是MVC

    ding

  • 相关阅读:
    完成卸载vs2010后再安装
    图片集合,可用作商品列表
    无可奈何花落去
    Uncaught TypeError: Cannot read property 'msie' of undefined
    CodeGenerator.cs
    年月日控件
    SQL GETDATE()日期格式化函数
    股票操作要点
    Rust 错误处理, 包裹错误
    使用 Rust 实现并查集
  • 原文地址:https://www.cnblogs.com/csic716/p/12174229.html
Copyright © 2011-2022 走看看