其他分享
首页 > 其他分享> > Django ORM常用字段及参数

Django ORM常用字段及参数

作者:互联网

目录

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

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

常用字段拓展:

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)

字段内的关键字参数

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

ForeignKey外键关系:

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


select_related和prefetch_related

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

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

Django ORM如何开启事务操作

事务的四大特性(ACID)

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

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

MySQL中开始事务:start transaction

Django ORM开启事务:

from django.db import transaction

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

MTV与MVC模型(了解)

MTV

MVC

本质 :MTV本质上也是MVC

标签:models,max,数据库,related,Django,length,ORM,常用字
来源: https://www.cnblogs.com/YGZICO/p/12198742.html