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)
新增
-
Student.objects.create(s_name=‘Tom‘)
-
stu=Student(s_name=‘Tom‘) stu.save()
-
stu=Student() stu.s_name=‘Tom‘ stu.save()
-
Student.objects.get_or_create(s_name=‘Tom‘) # 先查询再创建,返回一个元组:(object,True/False)
查询
更新
删除
模型过滤
Django通过模型的objects对象实现模型数据查询
-
.filter() 返回符合筛选条件的数据集
-
.exclude() 返回不符合筛选条件的数据集
-
.all() 返回所有的数据
-
.order_by() 排序
-
.values() 返回一个列表。列表中每个元素都是 一个字典
以上是关于Django学习记录-2-Model的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段
如何在 Django Summernote 中显示编程片段的代码块?
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段