Django学习记录-2-Model

Posted y-sh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习记录-2-Model相关的知识,希望对你有一定的参考价值。

Django Model

ORM

Django 模型使用自带的 ORM。

对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。

ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。

ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。

技术图片

使用 ORM 的好处:

  • 提高开发效率。
  • 不同数据库可以平滑切换。

使用 ORM 的缺点:

  • ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
  • 长期写 ORM 代码,会降低编写 SQL 语句的能力。

ORM 解析过程:

  • 1、ORM 会将 Python 代码转成为 SQL 语句。
  • 2、SQL 语句通过 pymysql 传送到数据库服务端。
  • 3、在数据库中执行 SQL 语句并将结果返回。

ORM 对应关系表:

技术图片

以上源自菜鸟教程↑


一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段

模型字段的定义

字段类型

  • AutoField():一个IntegerField,根据可用ID自动递增。如果没指定主键,就创建它自动设置为主键。

  • IntegerField():一个整数;

  • CharField(max_length = None):字符串字段

  • DateField(auto_now=False, auto_now_add=False):日期

  • TextField():一个很长的的文本字段

  • BooleanField():布尔字段;

  • OneToOneField(to, on_delete, parent_link = False):一对一

  • ForeignKey(to, on_delete):一对多

  • ManyToManyField(to):多对多

  • FileField(upload_to=‘uploads/‘) 上传文件,

  • ImageField() 保存图像文件,自动判断是否为图像

字段参数

  • null:如果设置为True,当该字段为空时,Django会将数据库中该字段设置为NULL,默认为False 。尽量避免将此参数设为True

  • blank:如果设置为True,该字段允许为空。默认为False。

  • default:该字段的默认值。可以是一个值或者是个可调用的对象,如果是个可调用对象,每次实例化模型时都会调用该对象。

  • db_column: 定义当前字段在数据表中的列名,未指定则使用字段名作为列名

  • primary_key:如果设置为 True ,将该字段设置为该模型的主键。

  • editable:如果设为False,那么当前字段将不会在admin后台或者其它的ModelForm表单中显示,同时还会被模型验证功能跳过。参数默认值为True。

  • unique:如果设置为 True,在整个数据表内该字段数据不可重复

CRUD

CRUD部分基于下方代码

from django.db import models


class Student(models.Model):
    s_name = models.CharField(max_length=20)
    s_age = models.IntegerField(default=18)

新增

  1. Student.objects.create(s_name=‘Tom‘)

  2. stu=Student(s_name=‘Tom‘)
    stu.save()
    
  3. stu=Student()
    stu.s_name=‘Tom‘
    stu.save()
    
  4. Student.objects.get_or_create(s_name=‘Tom‘)
    # 先查询再创建,返回一个元组:(object,True/False)
    

查询

更新

删除

模型过滤

Django通过模型的objects对象实现模型数据查询

  • .filter() 返回符合筛选条件的数据集

  • .exclude() 返回不符合筛选条件的数据集

  • .all() 返回所有的数据

  • .order_by() 排序

  • .values() 返回一个列表。列表中每个元素都是 一个字典

以上是关于Django学习记录-2-Model的主要内容,如果未能解决你的问题,请参考以下文章

Django学习---Models(ORM框架)

ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段

如何在 Django Summernote 中显示编程片段的代码块?

python小白学习记录 多线程爬取ts片段

golang代码片段(摘抄)

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段