• django -orm常用操作


    编辑
    Django从入门到放弃 - 刘清政 - 博客园
    python/Django-rest-framework框架/11-Book系列多表群操作 | Justin-刘清政的博客

    不使用django自带的项目名+表名,自定义数据库表名

    class MESSAGE_PROCESS_CHANNEL():
        class Meta:
            db_table="MESSAGE_PROCESS_CHANNEL"
    
    class BaseModel(models.Model):
      is_delete=models.BooleanField(default=False)  # 存到数据库也是0,1
      create_time=models.DateTimeField(auto_now_add=True)
      last_update_time=models.DateTimeField(auto_now_add=True)
      class Meta:
        # 单个字段有索引唯一
        # 多个字段,有联合索引,联合唯一
        abstract=True #抽象表,不在数据库建立
    
    class Book(BaseModel):
      id=models.AutoField(primary_key=True)
      name=models.CharField(max_length=32)
      price=models.DecimalField(max_digits=5,decimal_places=2)
    
      一对多的关系一旦确立,关联字段写在多的一方
      to_field 默认不写,关联到Publish主键
      db_constraint=False   #逻辑上的关联,实质没有外键联系,增删不会受影响,但是orm查询不影响
      publish=models.ForeginKey(to='Publish',on_delete=models.DO_NOTHING,db_constraint=False)  
      
      多对多,跟作者,关联字段写在查询次数多的一方
      什么时候使用自动,什么时候使用手动?第三张表只有关联字段,用自动。第三张表有扩展字段,需要手动写
      不能写on_delete,存在于第三张表
      autor=models.ManyToManyField(to='Author',db_constrain=False)
    
    class Publish(BaseModel):
      name=models.CharField(max_length=32)
      addr=models.CharField(max_length=32)
    
    class Author(BaseModel):
      name=models.CharField(max_length=32)
      sex=models.CharField(max_length=32)
      一对一的关系,写在查询频率高的一方,一对一也是一个foreginkey,本质是foreginkey+unique,字段唯一对唯一
      autordetail=models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE,db_constrain=False)  作者没了,作者详情没有用了
    
    class AuthorDetail(BaseModel):
      mobile=models.CharField(max_length=11)
    

    二、表断关联

    1、表之间没有外键关联,但是有外键逻辑关联(有充当外键的字段)
    2、断关联后不会影响数据库查询效率,但是会极大提高数据库增删改效率(不影响增删改查操作)
    3、断关联一定要通过逻辑保证表之间数据的安全,不要出现脏数据
    4、断关联
    5、级联关系
    作者没了,详情也没:on_delete=models.CASCADE #最好不要用,级联删除危险
    出版社没了,书还是那个出版社出版:on_delete=models.DO_NOTHING
    部门没了,员工没有部门(空不能):null=True, on_delete=models.SET_NULL
    部门没了,员工进入默认部门(默认值):default=0, on_delete=models.SET_DEFAULT

    values与values_list区别

    django: values()与values_list()

    更新字段为null

    无法将Django日期时间字段更新为Null

    正想查询与反向查询

    Django 两张表的正向查找和反向查找 - ihszg - 博客园

    微信:jinmuqq222
  • 相关阅读:
    linux下vim命令详解
    Linux 指令篇:档案目录管理chown
    分级渲染百度地图路段红黄绿功能
    矢量数据的属性值的添加、编辑、删除
    Extjs+C# 文件上传
    IBATIS 的动态SQL语句拼接
    一个DIV位于另一个div的右下角
    ArcGIS JavaScript API 添加点
    将Excel数据导入至SqlServer中
    Extjs 图表控件,可修改X轴与Y轴坐标
  • 原文地址:https://www.cnblogs.com/jinmuqq222/p/14526362.html
Copyright © 2020-2023  润新知