[内容] Django 单表数据的查询 (MariaDB 版)

注意:

1) 在增加 Django MariaDB&MySQL 数据之前要先创建连接了 MariaDB 数据库或 MySQL 数据库的 Django 项目

2) 对于本文而言,必须要先完成内容一里的内容,再完成内容二里的内容,才能继续完成内容三里的内容

正文:

内容一:配置 Django 环境

1.1 进入 Python 环境

(django_env) [root@python mysite]# python3

1.2 引入 os 模块和 django 模块

>>> import os,django

1.3 调用 mysite.settings 的配置

>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
'mysite.settings'

1.4 让刚刚的调用生效

>>> django.setup()

1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容

>>> from movies.models import *

内容二:设置 1 个显示上 1 句 SQL 语句的函数

>>> def showsql():
...     from django.db import connection
...     print(connection.queries[-1]['sql'])

(补充:这里的 [-1] 是指显示上 1 条操作的 SQL 语句)

内容三:Django MariaDB&MySQL 单条数据的条件查询(有可能 1 次性查出多条数据)

3.1 方法一

3.1.1 方法一查询某条数据的操作
>>> Movies.objects.get(mid=2)
<Movies: Movies object (2)>

(补充:这里以查询 movies 表中 mid 字段的值为 2 的数据为例)

3.1.2 显示方法一查询某条数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mid` = 2 LIMIT 21

(补充:这里以查询 movies 表中 mid 字段的值为 2 的数据为例)

3.2 方法二

3.2.1 方法二查询某条数据的操作
>>> Movies.objects.filter(mname__exact='Titanic')
<QuerySet [<Movies: Movies object (1)>]>

(补充:这里以查询 movies 表中 mname 字段的值精确为 Titanic 的数据为例)

3.2.2 显示方法二查询某条数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mname` = 'Titanic' LIMIT 21

(补充:这里以查询 movies 表中 mname 字段的值精确为 Titanic 的数据为例)

3.3 方法三

3.3.1 方法三查询某条数据的操作
>>> Movies.objects.filter(mname='titanic')
<QuerySet [<Movies: Movies object (1)>]>

(补充:这里以查询 movies 表中 mname 字段的值为 titanic 的数据为例)

3.3.2 方法三查询某条数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mname` = 'titanic' LIMIT 21

(补充:这里以查询 movies 表中 mname 字段的值为 titanic 的数据为例)

内容四:Django MariaDB&MySQL 单条数据的精准查询

4.1 查询第 1 条数据

4.1.1 查询第 1 条数据的操作
>>> Movies.objects.first()
<Movies: Movies object (1)>

(补充:这里以查询 movies 表中第一条数据为例)

4.1.2 显示查询第 1 条数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` ORDER BY `movies`.`mid` ASC LIMIT 1

(补充:这里以查询 movies 表中第一条数据为例)

4.2 查询最后 1 条数据

4.2.1 查询最后 1 条数据的操作
>>> Movies.objects.last()
<Movies: Movies object (5)>

(补充:这里以查询 movies 表中最后一条数据为例)

4.2.2 显示查询最后 1 条数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` ORDER BY `movies`.`mid` DESC LIMIT 1

(补充:这里以查询 movies 表中最后 1 条数据为例)

内容五:Django MariaDB&MySQL 多条数据的条件查询(有可能一次只查出一条数据)

5.1 Django MariaDB&MySQL 多条数据的字符串条件查询(有可能 1 次只查出 1 条数据)

5.1.1 查询包含某些字符串的数据
5.1.1.1 查询包含某些字符串的数据的操作
>>> Movies.objects.filter(mname__contains='it')
<QuerySet [<Movies: Movies object (1)>]>

(补充:这里以查询 movies 表中 mname 字段的值包含 it 字符串的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mname__contains= 在 mname 和 contains 之间有两个下横线 “_”

5.1.1.2 显示查询包含某些信息的数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mname` LIKE BINARY '%it%' LIMIT 21

(补充:这里以查询 movies 表中 mname 字段的值包含 it 字符串的所有数据为例)

5.1.2 查询包含某些字符串且不包含另某字符串的数据
5.1.2.1 查询包含某些字符串且不包含另某些字符串的数据的操作
>>> Movies.objects.filter(mname__contains='Car').exclude(mname__contains='Tit')
<QuerySet [<Movies: Movies object (4)>]>

(补充:这里以查询 movies 表中 mname 字段的值包含 Car 字符串但不包含 Tit 字符串的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mname__contains= 在 mname 和 contains 之间有两个下横线 “_”

5.1.2.2 显示包含某些字符串且不包含某些字符串的数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE (`movies`.`mname` LIKE BINARY '%Car%' AND NOT (`movies`.`mname` LIKE BINARY '%Tit%')) LIMIT 21

(补充:这里以查询 movies 表中 mname 字段的值包含 Car 字符串且不包含 Tit 字符串的所有数据为例)

5.2 Django MariaDB&MySQL 多条数据的数值比较条件查询(有可能 1 次只查出 1 条数据)

5.2.1 查询大于某个数值的数据
5.2.1.1 查询大于某个数值的数据的操作
>>> Movies.objects.filter(mid__gt='2')
<QuerySet [<Movies: Movies object (3)>, <Movies: Movies object (4)>, <Movies: Movies object (5)>]>

(补充:这里以查询 movies 表中 mid 字段的值大于 2 的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mid__gt= 在 mid 和 gt 之间有两个下横线 “_”

5.2.1.2 显示查询大于某个数值的数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mid` > 2 LIMIT 21

(补充:这里以查询 movies 表中 mid 字段的值大于 2 的所有数据为例)

5.2.2 查询大于等于某个数值的数据
5.2.2.1 查询大于等于某个数值的数据的操作
>>> Movies.objects.filter(mid__gte='2')
<QuerySet [<Movies: Movies object (2)>, <Movies: Movies object (3)>, <Movies: Movies object (4)>, <Movies: Movies object (5)>]>

(补充:这里以查询 movies 表中 mid 字段的值大于等于 2 的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mid__gte= 在 mid 和 gte 之间有两个下横线 “_”

5.2.2.2 显示查询大于等于某个数值的数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mid` >= 2 LIMIT 21

(补充:这里以查询 movies 表中 mid 字段的值大于等于 2 的所有数据为例)

5.2.3 查询小于某个数值的数据
5.2.3.1 查询小于某个数值的数据的操作
>>> Movies.objects.filter(mid__lt='2')
<QuerySet [<Movies: Movies object (1)>]>

(补充:这里以查询 movies 表中 mid 字段的值小于 2 的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mid__lt= 在 mid 和 lt 之间有两个下横线 “_”

5.2.3.2 显示查询小于某个数值的数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mid` < 2 LIMIT 21

(补充:这里以查询 movies 表中 mid 字段的值小于 2 的所有数据为例)

5.2.4 查询小于等于某个数值的数据
5.2.4.1 查询小于等于某个数值的数据的操作
>>> Movies.objects.filter(mid__lte='2')
<QuerySet [<Movies: Movies object (1)>, <Movies: Movies object (2)>]>

(补充:这里以查询 movies 表中 mid 字段的值小于等于 2 的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mid__lt= 在 mid 和 lt 之间有两个下横线 “_”

5.2.4.2 显示查询小于等于某个数值的数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mid` <= 2 LIMIT 21

(补充:这里以查询 movies 表中 mid 字段的值小于等于 2 的所有数据为例)

5.2.5 查询包含某个数值或另 1 个数值的数据
5.2.5.1 查询包含某个数值或另 1 个数值的操作
>>> Movies.objects.filter(mid__in=(2,4))
<QuerySet [<Movies: Movies object (2)>, <Movies: Movies object (4)>]>

(补充:这里以查询 movies 表中 mid 字段的值为 2 或者为 4 的数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mid__in= 在 mid 和 in 之间有两个下横线 “_”

5.2.5.2 查询包含某个数值或另 1 个数值的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mid` IN (2, 4) LIMIT 21
5.2.6 查询在 2 个数值之间的所有数据
5.2.6.1 查询在 2 个数值之间的所有数据的操作
>>> Movies.objects.filter(mid__range=(2,4))
<QuerySet [<Movies: Movies object (2)>, <Movies: Movies object (3)>, <Movies: Movies object (4)>]>

(补充:这里以查询 movies 表中 mid 字段的值在 2 和 4 之间的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mid__range= 在 mid 和 range 之间有两个下横线 “_”

5.2.6.2 查询在 2 个数值之间的所有数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mid` BETWEEN 2 AND 4 LIMIT 21


补充:
1) 这里以查询 movies 表中 mid 字段的值在 2 和 4 之间的所有数据为例
2) 这一步翻译成 SQL 语句也可以是:SELECT movies.mid, movies.mname, movies.mdesc, movies.mimg, movies.mlink FROM movies WHERE movies.mid >= 2 AND mid <= 4

5.3 Django MariaDB&MySQL 多条数据的空值条件查询(有可能 1 次只查出 1 条数据)

5.3.1 查询空值数据的操作
>>> Movies.objects.filter(mname__isnull=True)
<QuerySet []>

(补充:这里以查询 movies 表中 mname 字段是空值的数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mname__isnull= 在 mname 和 isnull 之间有两个下横线 “_”

5.3.2 查询控制数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mname` IS NULL LIMIT 21

(补充:这里以查询 movies 表中 mname 字段是空值的数据为例)

内容六:Django MariaDB&MySQL 多条数据的精准查询(有可能 1 次只查出 1 条数据)

6.1 Django MariaDB&MySQL 所有数据的查询(有可能 1 次只查出 1 条数据)

6.1.1 查询所有数据的操作
>>> Movies.objects.all()
<QuerySet [<Movies: Movies object (1)>, <Movies: Movies object (2)>, <Movies: Movies object (3)>, <Movies: Movies object (4)>, <Movies: Movies object (5)>]>

(补充:这里以查询 movies 表中所有的数据为例)

6.1.2 查询所有数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` LIMIT 21

(补充:这里以查询 movies 表中所有的数据为例)

6.2 Django MariaDB&MySQL 某个范围内的所有数据查询(有可能 1 次只查出 1 条数据)

6.2.1 查询从某条数据到某条到数据之间的所有数据
6.2.1.1 查询从某条数据到某条到数据之间所有数据的操作
>>> Movies.objects.all()[2:4]
<QuerySet [<Movies: Movies object (3)>, <Movies: Movies object (4)>]>
6.2.1.2 查询从某条数据到某条到数据之间所有数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` LIMIT 2 OFFSET 2

(补充:这里以查询 movies 表中的第 2 条到第 4 条的数据为例)

6.2.2 查询从某条数据开始后所有数据
6.2.2.1 查询从某条数据开始后所有数据的操作
>>> Movies.objects.filter(mname__startswith='Tit')
<QuerySet [<Movies: Movies object (1)>]>

(补充:这里以查询 movies 表中 mname 字段包含 Tit 的数据之后的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mname__startswith 在 mname 和 startswith 之间有两个下横线 “_”

6.2.2.2 查询从某条数据开始后所有数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mname` LIKE BINARY 'Tit%' LIMIT 21

(补充:这里以查询 movies 表中 mname 字段以包含 Tit 的数据之后的所有数据为例)

6.2.3 查询从某条数据结束前的所有数据
6.2.3.1 查询从某条数据结束前所有数据的操作
>>> Movies.objects.filter(mname__endswith='nic')
<QuerySet [<Movies: Movies object (1)>]>

(补充:这里以查询 movies 表中 mname 字段包含 nic 的数据之前的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mname__endswith 在 mname 和 endswith 之间有两个下横线 “_”

6.2.3.2 查询从某条数据结束前所有数据的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mname` LIKE BINARY '%nic' LIMIT 21

(补充:这里以查询 movies 表中 mname 字段包含 nic 的数据之前的所有数据为例)

内容七:Django MariaDB&MySQL 的数据查询方式

7.1 Django MariaDB&MySQL 查询包含某些信息的部分字段

7.1.1 查询包含某些信息部分字段的操作
>>> Movies.objects.values('mname','mid').filter(mname__contains='Tit')
<QuerySet [{'mname': 'Titanic', 'mid': 1}]>

(补充:这里以查询 movies 表中 mname 字段包含 Tit 的所有数据为例)


注意:
1) 这里需要区分大小写
2) 这里的 mname__contains 在 mname 和 contains 之间有两个下横线 “_”

7.1.2 查询包含某些信息部分字段的 SQL 语句
>>> showsql()
SELECT `movies`.`mname`, `movies`.`mid` FROM `movies` WHERE `movies`.`mname` LIKE BINARY '%Tit%' LIMIT 21

(补充:这里以查询 movies 表中 mname 字段包含 Tit 的所有数据为例)

7.2 Django MariaDB&MySQL 忽略大小写查询

7.2.1 忽略大小写查询的操作
>>> Movies.objects.filter(mname__istartswith='Titanic')
<QuerySet [<Movies: Movies object (1)>]>

(补充:这里以查询 movies 表中 mname 字段包含 Titanic 的数据之后的所有数据为例)

(注意:这里的 mname__istartswith 在 mname 和 istartswith 之间有两个下横线 “_”)

7.2.2 忽略大小写查询的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` WHERE `movies`.`mname` LIKE 'Titanic%' LIMIT 21

(补充:这里以查询 movies 表中 mname 字段包含 Titanic 的数据之后的所有数据为例)

7.3 Django MariaDB&MySQL 排序查询

7.3.1 升序查询
7.3.1.1 升序查询的操作
>>> Movies.objects.order_by('mid')
<QuerySet [<Movies: Movies object (1)>, <Movies: Movies object (2)>, <Movies: Movies object (3)>, <Movies: Movies object (4)>, <Movies: Movies object (5)>]>

(补充:这里以查询 movies 表中的所有数据并以 mid 字段进行升序展示为例)

7.3.1.2 升序查询的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` ORDER BY `movies`.`mid` ASC LIMIT 21

(补充:这里以查询 movies 表中的所有数据并以 mid 字段进行升序展示为例)

7.3.2 降序查询
7.3.2.1 降序查询的操作
>>> Movies.objects.order_by('-mid')
<QuerySet [<Movies: Movies object (5)>, <Movies: Movies object (4)>, <Movies: Movies object (3)>, <Movies: Movies object (2)>, <Movies: Movies object (1)>]>

(补充:这里以查询 movies 表中的所有数据并以 mid 字段进行降序展示为例)

7.3.2.2 降序查询的 SQL 语句
>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` ORDER BY `movies`.`mid` DESC LIMIT 21

(补充:这里以查询 movies 表中的所有数据并以 mid 字段进行降序展示为例)

7.4 Django MariaDB&MySQL 查询数据条数

7.4.1 查询数据条数的操作
>>> Movies.objects.count()
5

(补充:这里以查询 movies 表中的所有数据为例)

7.4.2 查询数据条数的 SQL 语句
>>> showsql()
SELECT COUNT(*) AS `__count` FROM `movies`

(补充:这里以查询 movies 表中的所有数据为例)