一、 模型

1.1 概述

为了构建和操纵WEB项目的数据,Django提供了一个抽象的模型层,通过它可以便捷的实现数据表及数据(记录)的管理。

Django中把每一张数据表称为一个模型(Model),每个模型必须要继承django.db.models.Model

通过MySQL客户端创建数据库,代码如下:


create database if not exists books default character set 'utf8';

1.2 Django配置MySQL数据库

第一步:安装Python开发库和头文件



sudo apt-get install python3-dev default-libmysqlclient-dev

第二步:安装mysqlclient


sudo pip3 install mysqlclient

1.3 settings.py中关于MySQL的配置



DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        # MySQL服务器的地址
        'HOST':'127.0.0.1',
        # MySQL服务器的端品号
        'PORT':3306,
        # 用户名
        'USER':'root',
        # 密码
        'PASSWORD':'123456',
        # 数据库名称
        'NAME': 'books',
    }
}

上述配置类似于:


mysql -h127.0.0.1 -P3306 -uroot -p123456   -Dbooks

二、ORM

ORM(Object-Relational Mapping),对象关系映射,是一种将面向对象的编程语言和关系型数据库之间的映射技术。

Django中每一个模型(类)都映射数据库中的一张数据表。

模型的属性映射成数据表的字段;

模型对象映射成数据表中的记录。

1690253312807.png

1690253299172.png

ORM的优点是:

a.不再编写各种SQL语句

b.提升工作效率

其缺点:

a.会存在一定的性能损失

b.某些复杂的SQL可能无法完成

2.1 创建模型

创建模型实质就是创建表结构!!! -- 也就是CREATE TABLE


from django.db import models
class ModelName(models.Model):
    propertyName = models.FieldType(options)
    ...
    ...

说明:

  • ModelName最终形成数据表的表名称
  • propertyName最终形成数据表的字段名称
  • fieldType指字段的数据类型,只不过在Django用它来表示

2.2 字段类型

字段类型MySQL数据类型
AutoField()INT AUTO_INCREMENT PRIMARY KEY
BigAutoField()BIGINT AUTO_INCREMENT PRIMARY KEY
BooleanField()TINYINT(1)
CharField(max_length=长度)VARCHAR(长度)
DecimalField(max_digits=最大长度,decimal_places=小数点后的位数)DECIMAL(X,Y)
FloatField()DOUBLE

2.4 数据迁移

数据迁移是在Django中修改模后,将这些修改过程应用于数据库的过程。

第一步:创建迁移文件


python3 manage.py makemigrations

第二步:应用迁移


python3 manage.py migrate

三、管理器

管理器Manager是一种接口,它赋予了Django模型操作数据表(如增删改查等)的能力。

默认情况下,Django为所有的模型添加了一个名称为objects的管理器。访问模型的管理器的语法结构:


ModelName.objects

模型是指数据表的结构,如包含有哪些字段,数据类型是什么?...

管理器则提供了针对数据表增、删、改、查等能力;

查询结果集则只针对于SELECT操作有效。

四、QuerySet 对象

QuerySet称为查询集或查询结果集,用于表示与模型管理器所关联的模型的查询结果。

all()

all()方法用于返回当前QuerySet的全部记录,语法结构是:


QuerySet.all()

get()

get()方法用于返回与指定查找的参数相匹配的记录,但在使用时需要注意必须保证查询的唯一性,也就代表一般都是按主键进行查找。


QuerySet.get(id=5)#必须保证唯一性 

QuerySet.get(pk=5) #必须按主键查询

标准SQL SELECT语句为:


SELECT expression[,...]  FROM table

[WHERE condition]

[GROUP BY field]
[HAVING field_name]
[ORDER BY field [ASC|DESC][,...]]
[LIMIT [offset,]row_count]

谓语查询

谓语查询实际上就是SQL语句的中的WHERE子句,其基本的语法结构是:



ModelName.objects.filter(field__lookuptype=value)

filter()方法用于返回一个新的QuerySet对象,其中包含有与指定参数相匹配的记录。

field指要进行条件筛选的字段名称

lookuptype指运算符的英文的对应名称,假设现在要查询booklist数据表中price字段值的大于100的所有记录,SQL语句为


SELECT * FROM booklist WHERE price > 100

Django中:


BookList.objects.filter(price__gt=100)

常用的谓语查询有:

exact,完全匹配指定值


book = BookList.objects.filter(id__exact=9)

contains,包含指定值(区分大小写)


books = BookList.objects.filter(bookname__contains='906')

in,匹配指定列表或元组内的任意一个值


books = BookList.objects.filter(id__in =[10,22,39])

gt,匹配大于指定值


books = BookList.objects.filter(price__gt = 1000 )

lt,匹配小于指定值


books = BookList.objects.filter(price__lt = 30 )

gte,匹配大于或等于指定值



books = BookList.objects.filter(id__gte = 740 )

lte,匹配小于或等于指定值


books = BookList.objects.filter(id__lte = 10 )

startswith,匹配以指定值开头


books = BookList.objects.filter(bookname__startswith='甲骨文')

endswith,匹配以指定值结束


books = BookList.objects.filter(bookname__endswith='甲骨文')

range,匹配指定以元组内第一个元素为最小值,第二个元素为最大值的对象(含)


books = BookList.objects.filter(id__range=(10,15))

多个条件,如:


books = BookList.objects.filter(price__gt=100,id__gte=500)

values()

values()方法用于指定要返回的字段,其返回值为QuerySet,语法结构是:


QuerySet.values(*fields)

如:


BookList.objects.values('id','bookname','price').filter

first()

返回查询结果集中的第一个对象,如果没有匹配的对象,则返回None


QuerySet.first()

last()

返回查询结果集中的最后个对象,如果没有匹配的对象,则返回None


QuerySet.last()

count()

count() 用于获取查询结果集包含的行数,语法结构为:


QuerySet.count()
最后修改:2024 年 11 月 09 日
如果觉得我的文章对你有用,请随意赞赏