Django ORM常用字段及参数

目录

  • Django ORM常用字段及参数

    • models中的常用字段
    • 字段内的关键字参数
    • 数据库查询优化(面试问题)
    • Django ORM如何开启事务操作
    • MTV与MVC模型(了解)

Django ORM常用字段及参数

models中的常用字段

models中常用字段与数据库中的对应关系

models中常用字段 数据库对应字段
AutoField(primary_key=True) 主键字段
CharField(max_length=32) varchar(32)
IntegerField() int
BigIntergerField() bigint
DecimalField() decimal
EmailField() varchar(254)
DateField() date
DateTimeField() datetime

日期字段中有两个容易搞混掉的字段

  • auto_now:每次编辑数据的时候都会自动更新该字段时间
  • auto_now_add:创建数据的时候会把当前时间添加到数据库

常用字段拓展:

BooleanField(Field)
    # 给该字段传布尔值,会对应成数字 0/1
    # 通常用于两种值就可以表示属性的字段,比如
    is_delete
    is_status
    is_vip
    ...

TextField(Field)
    # 文本类型,用来存储大段文本
    # varchar和char的最大值只有255,如果存文章的话就用到该字段

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

# 自定义一个类,添加我们自定义的RealCharField测试一下
class Movie(models.Model):
    testField = RealCharField(max_length=64, null=True)

字段内的关键字参数

之前用过的很常见的比如:

  • null:可以将该字段设置为空
  • default:可以设置默认值
  • unique:如果设置为unique=True则该字段在表中必须是唯一的
  • db_index:如果db_index=True代表着此字段设置索引

ForeignKey外键关系:

  • ForeignKey:表示外键关联关系,一般把该字段设置在"一对多"多的一方
  • to:设置要关联的表
  • to_field:设置要关联的表的字段
  • on_delete:当删除关联表中的数据时,当前表与其关联的行的行为
  • models.CASCADE:删除关联数据,与之关联也删除(级联删除)
  • db_constraint:在数据库中创建外键约束,默认为True

Django终端打印SQL语句

在Django项目的settings.py文件中,在最后或任意位置复制粘贴如下代码:

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

配置好之后,再执行任何对数据库进行操作的语句时,会自动将Django执行的sql语句打印到pycharm终端上

choice参数

当你的数据能够被你列举完全,就可以考虑使用该参数

比如:用户的性别(男/女)、婚否(已婚/未婚)、在职(在职/离职)

举个简单的例子

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

user_obj = models.UserInfo.objects.get(pk=1)
     print(user_obj.username, user_obj.gender)  # 1
    # 针对choice参数字段取值的时候 get_xxx_display()
    print(user_obj.gender)  # 1
    print(user_obj.get_gender_display())    # 男
    # 针对没有注释信息的数据 get_xxx_display()获取到的还是数字本身

数据库查询优化(面试问题)

only和defer

  • only:

    res = models.Book.objects.only('title')
  • only作用:
    括号内传字段,得到的结果是一个列表套数据对象,该对象内只含有括号内指定的字段属性,对象点该字段属性,是不会走数据库的,但是一旦点非括号内的字段,也能够拿到数据,但是是重新走的数据库查询
  • defer:
    res = models.Book.objects.defer('title')
  • defer作用:defer与only相反
    括号内传字段,得到的结果是一个列表套数据对象,该对象内没有括号内指定的字段属性对象点该字段属性,是重复走数据库,但是一旦点非括号内的字段,也能够拿到数据,但是就不走数据库查询了


select_related和prefetch_related

  • select_related:

    res = models.Book.objects.select_related('publish')
  • select_related介绍和作用:

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

    select_related括号内只能传外键字段,并且不能是多对多字段,只能是一对多或一对一字段可以传入多个外键字段
    (外键字段1__外键字段2__外键字段3)

  • prefetch_related:
    res = models.Book.objects.prefetch_related('publish')
  • prefetch_related介绍与作用:

    内部是子查询,但是给我们的感觉是链表操作,内部通过子查询将外键关联表中的数据也全部封装到对象中,之后对象点当前表或者外键关联表中的字段也都不需要走数据库了

两者的区别(根据应用环境而定):

"""
select_related:
连表操作,好处在于只走一次SQL查询
耗时耗在连接表的操作
"""
"""
prefetch_related
子查询,走两次SQL查询
耗时耗在查询次数
"""

Django ORM如何开启事务操作

事务的四大特性(ACID)

简单介绍一下,具体查看MySQL了解知识篇中的事务详解

  • 原子性:事务是一个不可分割的单位
  • 一致性:与原子性绑定在一起的,事务的操作要么同时成功,要么同时失败
  • 隔离性:事务与事务之间互不干扰
  • 持久性:事务的操作提交(commit)之后,永久改变数据

提交之后,不可回滚(rollback)

MySQL中开始事务:start transaction

Django ORM开启事务:

from django.db import transaction

with transaction.atomic():
    pass
# 在with代码块中执行的orm语句同属于一个事务,代码块运行结束事务随之结束

MTV与MVC模型(了解)

MTV

  • M:models
  • T:templates
  • V:views

MVC

  • M:models
  • V:views
  • C:controller(控制器,路由分发)

本质 :MTV本质上也是MVC

原文地址:https://www.cnblogs.com/YGZICO/p/12198742.html

时间: 2024-10-11 09:39:49

Django ORM常用字段及参数的相关文章

Django—ORM常用字段和参数

一.ORM常用的字段和参数 1.0 常用字段 # AutoField: int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. # IntegerField: 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) # CharField: 字符类型,必须提供max_length参数, max_length表示字符长度 # DateField: 日期字

Django ORM 常用字段和参数

一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647. CharField 字符类型,必须提供max_length参数, max_length表示字符长度. DateField 日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例. DateTim

orm 常用字段及参数

一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可.如果Django发现你已经明确地设置了Field.primary_key,它将不会添加自动ID列. 本示例中的CREATE TABLE SQL使用PostgreSQL语法进行格式化,但值

ORM常用字段和参数

ORM常用字段和参数 一.ORM字段 1. AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. 2. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647. 3. CharField 字符类型,必须提供max_length参数, max_length表示字符长度. 4. DateField 日期字段,日期格式 YYYY-MM-DD,相当于Python中的da

ORM常用字段及参数

目录 ORM常用字段及参数 ORM常用字段 ORM字段参数 关系字段 必知必会13条 13个必会操作总结 ORM常用字段及参数 ORM常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_len

python3开发进阶-Django框架的ORM常用字段和参数

阅读目录 常用字段 字段合集 自定义字段 字段参数 关系参数 多对多的关联关系的三种方式 一.常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.  (最大十位) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. DateField 日期字段,

Django框架(九) Django之ORM常用字段和参数

ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647. CharField 字符类型,必须提供max_length参数, max_length表示字符长度. DateField 日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例. DateTim

Django ORM中常用字段和参数

Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. 这里需要知道的是Django中的CharFiel

Django框架之模型层 常用字段和参数

目录 一.Django ORM 常用字段和参数 1.1 常用字段 1.2 所有字段(争取记忆) 1.2.1 orm字段与MySQL字段对应关系 1.3 自定义字段 1.3 字段参数 1.3.1 DateField和DateTimeField的字段参数 二.关系字段 2.1 ForeignKey 2.1.1 字段参数 2.1.2 其余字段参数 2.2 OneToOneField 2.2.1 字段参数 2.3 ManyToManyField 2.3.1 字段参数 一些说明: 表的名称是自动生成的,如