[实验] Django 单表数据的操作 (通过自带应用 admin 实现) (MariaDB版)

注意:

文中的 python 系统名、mysite 项目、post 应用和 Post 类只是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

正文:

步骤目录:

步骤一:系统环境要求

步骤二:安装 Django
2.1 安装 Python3
2.2 创建并进入 Django 项目的目录
2.3 将 Django 项目的目录指定为 Django 环境
2.4 进入 Django 环境

步骤三:创建 mysite 项目
3.1 创建 mysite 项目
3.2 mysite 项目的目录
3.2.1 安装 tree 目录显示软件
3.2.2 显示 mysite 项目的目录
3.3.3 Django 项目目录介绍

步骤四:创建 post 应用
4.1 创建 post 应用
4.2 post 应用的目录
4.2.1 显示 post 应用的目录
4.2.2 Django 应用目录介绍
4.3 在 mysite 应用中导入 post 应用

步骤五:搭建用于 Django 的 MariaDB 数据库环境
5.1 安装 MairaDB 数据库和客户端
5.2 创建用于 Django 的 MairaDB 的库和用户
5.2.1 进入 MairaDB 数据库
5.2.2 创建用于 Django 的库
5.2.3 创建用于 Django 的用户
5.2.4 刷新权限
5.3 退出 MariaDB 数据库
5.4 重启 MariaDB

步骤六:实现连接 MariaDB 数据库
6.1 安装 Django 连接 MariaDB 的模块
6.2 在 mysite 应用中添加 Django 连接 MariaDB 的模块
6.3 在 post 应用数据库模板中添加 Post 类
6.3.1 在 post 应用数据库模板中添加 Post 类
6.3.2 安装 models.ImageField 字段所需模块
6.4 在 mysite 应用中设置连接到 MariaDB 数据库
6.5 生成牵引文件
6.6 将牵引文件导入 MariaDB 数据库
6.7 查看导入到 MariaDB 数据库的表
6.7.1 进入 MariaDB 数据库
6.7.2 查看所有的库
6.7.3 进入 post 库
6.7.4 查看 test 库里所有的表
6.7.5 查看 t_post 表里的数据
6.7.6 查看 t_post 的表结构
6.7.7 退出 MariaDB 数据库

步骤七:设置 admin 应用
7.1 在 Django 自带的 admin 应用中导入数据库模版中的 post 类
7.2 设置 admin 应用的语言和时区
7.3 创建 admin 应用的账号

步骤八:启动 Django 服务

步骤九:使用 admin 应用操作数据

具体的操作步骤:

步骤一:系统环境要求

1) 服务器的系统需要是 openSUSE 15.2 版本
2) 服务器要关闭防火墙
3) 服务器系统要配置好可用的软件源(最好是软件数量最多的官方版本)
4) 服务器要能够连接外网

步骤二:安装 Django
2.1 安装 Python3

[root@python ~]# zypper -n install python3

(补充:在此次操作发生时,最新的 python 版本是 3.6.12)

2.2 创建并进入 Django 项目的目录

[root@python ~]# mkdir project
[root@python ~]# cd project

2.3 将 Django 项目的目录指定为 Django 环境

[root@python project]# python3 -m venv django_env

2.4 进入 Django 环境

[root@python project]# source django_env/bin/activate
(django_env) [root@python project]# pip install django

(补充:在此次操作发生时,最新的 Django 版本是 3.2)

步骤三:创建 mysite 项目
3.1 创建 mysite 项目

(django_env) [root@python project]# django-admin startproject mysite

3.2 mysite 项目的目录
3.2.1 安装 tree 目录显示软件

(django_env) [root@python project]# zypper -n install tree

3.2.2 显示 mysite 项目的目录

(django_env) [root@python project]# cd mysite
(django_env) [root@python mysite]# tree
.
├── manage.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files

3.3.3 Django 项目目录介绍

1) mysite 此 Django 项目的容器
2) manage.py 命令行工具,与 Django 项目进行交互
3) mysite/__init__.py 空文件,通知 Python 此项目是一个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 post 应用
4.1 创建 post 应用

(django_env) [root@python mysite]# django-admin startapp post

4.2 post 应用的目录
4.2.1 显示 post 应用的目录

(django_env) [root@python mysite]# tree
.
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── post
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

3 directories, 13 files

4.2.2 Django 应用目录介绍

1) movies/app.py 此 Django 应用的容器
2) movies/__init__.py 空文件,通知 python 此项目是一个 python 包
3) movies/admin.py 此 Django 应用自带的后台管理相关的类
4) movies/app.py 此 Django 应用指定应用名的文件
5) movies/migrations.py 此 Django 应用通过 python 代码生成数据库表时里面会产生一些迁移文件
6) movies/models.py 可以在里面创建一些 Python 对象并通过这些对象在数据库里创建对应的表
7) movies/test.py 此 Django 应用的测试文档
8) movies/views.py 此 Django 应用的视图,接收前端数据,把数据传递给后端,响应相关页面

4.3 在 mysite 应用中导入 post 应用

在 mysite/mysite/settings.py 中添加以下内容:

INSTALLED_APPS = [
    'post',
]

步骤五:搭建用于 Django 的 MariaDB 数据库环境
5.1 安装 MairaDB 数据库和客户端

(django_env) [root@python mysite]# zypper -n install mariadb mariadb-devel mariadb-server mariadb-client

5.2 创建用于 Django 的 MairaDB 的库和用户
5.2.1 进入 MairaDB 数据库

(django_env) [root@python mysite]# mysql -h 127.0.0.1 -p

5.2.2 创建用于 Django 的库

MariaDB [(none)]> create database post;

(补充:这里以创建 post 库为例)

5.2.3 创建用于 Django 的用户

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

(补充:这里以创建 root 用户,密码是 password 为例)

5.2.4 刷新权限

MariaDB [(movies)]> flush privileges;

5.3 退出 MariaDB 数据库

MariaDB [(none)]> exit

5.4 重启 MariaDB

(django_env) [root@python mysite]# systemctl restart mariadb

步骤六:实现连接 MariaDB 数据库
6.1 安装 Django 连接 MariaDB 的模块

(django_env) [root@python mysite]# pip3 install hexdump
(django_env) [root@python mysite]# pip3 install pymysql

6.2 在 mysite 应用中添加 Django 连接 MariaDB 的模块

在 mysite/mysite/__init__.py 中添加以下内容:

......
import pymysql
pymysql.install_as_MySQLdb()

6.3 在 post 应用数据库模板中添加 Post 类
6.3.1 在 post 应用数据库模板中添加 Post 类

在 mysite/users/models.py 中添加以下内容:

......
class Post(models.Model):
    pid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100,unique=True)
    content = models.TextField()
    create = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now_add=True)
    email = models.EmailField()
    isdelete = models.BooleanField(default=False)
    access_count = models.PositiveIntegerField() 
    price = models.DecimalField(max_digits=5,decimal_places=2)
    file = models.ImageField(upload_to='upload/images')

    def __str__(self):
        return u'Post:%s,%s’%(self.title,self.access_count)

    class Meta:
        db_table = 't_post'


补充:
1) 如果在 create = models.DateTimeField(auto_now_add=True) 和 modified = models.DateTimeField(auto_now_add=True) 中删除了 auto_now_add=True,则它们可以直接在后端管理页面里显示了,否则的话它们只会在后端自动生成而不显示
2) 这里的这条语句会让 Post 类中 title 字段和 access_count 字段以 Post:<title value>,<access_count value> 的列表形式显示出来:

    def __str__(self):
        return u'Post:%s,%s’%(self.title,self.access_count)

3) 这里的这条语句会将表明指定为 t_post

    class Meta:
        db_table = 't_post'

6.3.2 安装 models.ImageField 字段所需模块

(django_env) [root@python mysite]# pip3 install Pillow

6.4 在 mysite 应用中设置连接到 MariaDB 数据库

将 mysite/mysite/settings.py 中的以下内容:

......
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
......

修改为:

......
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'post',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'password',
    }
}
......


补充:这里以
1) 使用的库是 post
2) 使用的服务器是 127.0.0.1
3) 使用的端口是 3306
4) 使用的用户是 root
5) 使用的密码是 password
为例

6.5 生成牵引文件

(django_env) [root@python mysite]# python3 manage.py makemigrations
Migrations for 'post':
  post/migrations/0001_initial.py
    - Create model Post

(补充:这里以将 users 应用的 model 模块转换成牵引文件为例)

6.6 将牵引文件导入 MariaDB 数据库

(django_env) [root@python mysite]# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, post, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying post.0001_initial... OK
  Applying sessions.0001_initial... OK

6.7 查看导入到 MariaDB 数据库的表
6.7.1 进入 MariaDB 数据库

(django_env) [root@python mysite]# mysql -uroot -h127.0.0.1 -p

6.7.2 查看所有的库

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| post               |
+--------------------+
4 rows in set (0.001 sec)

6.7.3 进入 post 库

MariaDB [(post)]> use post;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

6.7.4 查看 test 库里所有的表

MariaDB [(post)]> show tables;
+----------------------------+
| Tables_in_test             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| t_post                     |
+----------------------------+
11 rows in set (0.001 sec)

6.7.5 查看 t_post 表里的数据

MariaDB [(post)]> select * from t_post;
Empty set (0.001 sec)

6.7.6 查看 t_post 表的表结构

MariaDB [(post)]> desc t_post;
+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| pid          | int(11)          | NO   | PRI | NULL    | auto_increment |
| title        | varchar(100)     | NO   | UNI | NULL    |                |
| content      | longtext         | NO   |     | NULL    |                |
| create       | datetime(6)      | NO   |     | NULL    |                |
| modified     | datetime(6)      | NO   |     | NULL    |                |
| email        | varchar(254)     | NO   |     | NULL    |                |
| isdelete     | tinyint(1)       | NO   |     | NULL    |                |
| access_count | int(10) unsigned | NO   |     | NULL    |                |
| price        | decimal(5,2)     | NO   |     | NULL    |                |
| file         | varchar(100)     | NO   |     | NULL    |                |
+--------------+------------------+------+-----+---------+----------------+
10 rows in set (0.006 sec)

6.7.7 退出 MariaDB 数据库

MariaDB [(post)]> quit();

步骤七:设置 admin 应用
7.1 在 Django 自带的 admin 应用中导入数据库模版中的 post 类

在 mysite/users/admin.py 中添加以下内容:

......
from .models import Post

admin.site.register(Post)

(补充:这里以导入 models 的 Post 类为例)

7.2 设置 admin 应用的语言和时区

在 mysite/mysite/settings.py 中将以下内容:

......
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'
......

修改为:

......
LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'
......

(补充:这里设置语言为汉语,时区为上海为例)

7.3 创建 admin 应用的账号

(django_env) [root@python mysite]# python3 manage.py createsuperuser
Username (leave blank to use 'root'): eternalcenter
Email address: eternalcenter@eternalcenter.com
Password: 
Password (again): 
This password is too short. It must contain at least 8 characters.
This password is too common.
This password is entirely numeric.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

步骤八:启动 Django 服务

(django_env) [root@python mysite]# python3 manage.py runserver

步骤九:使用 admin 应用操作数据

1) 打开网页:

http://127.0.0.1:8000/admin/

2) 使用创建的 admin 模块的用户登录
3) 点击 Posts 后面的 “增加”
4) 可以看见刚刚创建的表格,并可以进行数据操作

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

注意:

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

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

正文:

步骤目录:

内容一:配置 Django 环境
1.1 进入 Python 环境
1.2 引入 os 模块和 django 模块
1.3 调用 mysite.settings 的配置
1.4 让刚刚的调用生效
1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容

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

内容三:Django MariaDB&MySQL 单条数据的条件查询(有可能一次性查出多条数据)
3.1.1 查询某一条数据
3.1 方法一
3.1.1 方法一查询某一条数据的操作
3.1.2 显示方法一查询某一条数据的 SQL 语句
3.2 方法二
3.2.1 方法二查询某一条数据的操作
3.2.2 方法二查询某一条数据的 SQL 语句
3.3 方法三
3.3.1 方法三查询某一条数据的操作
3.3.2 方法三查询某一条数据的 SQL 语句

内容四:Django MariaDB&MySQL 单条数据的精准查询
4.1 查询第一条数据
4.1.1 查询第一条数据的操作
4.1.2 显示查询第一条数据的 SQL 语句
4.2 查询最后一条数据
4.2.1 查询最后一条数据的操作
4.2.2 显示查询最后一条数据的 SQL 语句

内容五:Django MariaDB&MySQL 多条数据的条件查询(有可能一次只查出一条数据)
5.1 Django MariaDB&MySQL 多条数据的字符串条件查询(有可能一次只查出一条数据)
5.1.1 查询包含某些字符串的数据
5.1.1.1 查询包含某些字符串的数据的操作
5.1.1.2 显示查询包含某些信息的数据的 SQL 语句
5.1.2 查询包含某些字符串且不包含另一些字符串的数据
5.1.2.1 查询包含某些字符串且不包含另一些字符串的数据的操作
5.1.2.2 显示查询包含某些字符串且不包含另一些字符串的数据的 SQL 语句
5.2 Django MariaDB&MySQL 多条数据的数值比较条件查询(有可能一次只查出一条数据)
5.2.1 查询大于某一个数值的数据
5.2.1.1 查询大于某一个数值的数据的操作
5.2.1.2 显示查询大于某一个数值的数据的 SQL 语句
5.2.2 查询大于等于某一个数值的数据
5.2.2.1 查询大于等于某一个数值的数据的操作
5.2.2.2 显示查询大于等于某一个数值的数据的 SQL 语句
5.2.3 查询小于某一个数值的数据
5.2.3.1 查询小于某一个数值的数据的操作
5.2.3.2 显示查询小于某一个数值的数据的 SQL 语句
5.2.4 查询小于等于某一个数值的数据
5.2.4.1 查询小于等于某一个数值的数据的操作
5.2.4.2 显示查询小于等于某一个数值的数据的 SQL 语句
5.2.5 查询包含一个数值或另一个数值的数据
5.2.5.1 查询包含一个数值或另一个数值的操作
5.2.5.2 查询包含一个数值或另一个数值的 SQL 语句
5.2.6 查询在两个数值之间的所有数据
5.2.6.1 查询在两个数值之间的所有数据的操作
5.2.6.2 查询在两个数值之间的所有数据的 SQL 语句
5.3 Django MariaDB&MySQL 多条数据的空值条件查询(有可能一次只查出一条数据)
5.3.1 查询空值数据的操作
5.3.2 查询控制数据的 SQL 语句

内容六:Django MariaDB&MySQL 多条数据的精准查询(有可能一次只查出一条数据)
6.1 Django MariaDB&MySQL 所有数据的查询(有可能一次只查出一条数据)
6.1.1 查询所有数据的操作
6.1.2 查询所有数据的 SQL 语句
6.2 Django MariaDB&MySQL 某个范围内的所有数据查询(有可能一次只查出一条数据)
6.2.1 查询从某一条数据到某一条到数据之间的所有数据
6.2.1.1 查询从某一条数据到某一条到数据之间所有数据的操作
6.2.1.2 查询从某一条数据到某一条到数据之间所有数据的 SQL 语句
6.2.2 查询从某一条数据开始后所有数据
6.2.2.1 查询从某一条数据开始后所有数据的操作
6.2.2.2 查询从某一条数据开始后所有数据的 SQL 语句
6.2.3 查询从某一条数据结束前的所有数据
6.2.3.1 查询从某一条数据结束前所有数据的操作
6.2.3.2 查询从某一条数据结束前所有数据的 SQL 语句

内容七:Django MariaDB&MySQL 的数据查询方式
7.1 Django MariaDB&MySQL 查询包含某些信息的部分字段
7.1.1 Django MariaDB&MySQL 查询包含某些信息部分字段的操作
7.1.2 Django MariaDB&MySQL 查询包含某些信息部分字段的 SQL 语句
7.2 Django MariaDB&MySQL 忽略大小写查询
7.2.1 Django MariaDB&MySQL 忽略大小写查询的操作
7.2.2 Django MariaDB&MySQL 忽略大小写查询的 SQL 语句
7.3 Django MariaDB&MySQL 排序查询
7.3.1 升序查询
7.3.1.1 升序查询的操作
7.3.1.2 升序查询的 SQL 语句
7.3.2 降序查询
7.3.2.1 降序查询的操作
7.3.2.2 降序查询的 SQL 语句
7.4 Django MariaDB&MySQL 查询数据条数
7.4.1 Django MariaDB&MySQL 查询数据条数的操作
7.4.2 Django MariaDB&MySQL 查询数据条数的 SQL 语句

具体的操作步骤:

内容一:配置 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 *

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

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

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

内容三:Django MariaDB&MySQL 单条数据的条件查询(有可能一次性查出多条数据)
3.1.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 查询第一条数据
4.1.1 查询第一条数据的操作

>>> Movies.objects.first()
<Movies: Movies object (1)>

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

4.1.2 显示查询第一条数据的 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 查询最后一条数据
4.2.1 查询最后一条数据的操作

>>> Movies.objects.last()
<Movies: Movies object (5)>

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

4.2.2 显示查询最后一条数据的 SQL 语句

>>> showsql()
SELECT `movies`.`mid`, `movies`.`mname`, `movies`.`mdesc`, `movies`.`mimg`, `movies`.`mlink` FROM `movies` ORDER BY `movies`.`mid` DESC LIMIT 1

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

内容五:Django MariaDB&MySQL 多条数据的条件查询(有可能一次只查出一条数据)
5.1 Django MariaDB&MySQL 多条数据的字符串条件查询(有可能一次只查出一条数据)
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 多条数据的数值比较条件查询(有可能一次只查出一条数据)
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 查询包含一个数值或另一个数值的数据
5.2.5.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 查询包含一个数值或另一个数值的 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 查询在两个数值之间的所有数据
5.2.6.1 查询在两个数值之间的所有数据的操作

>>> 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 查询在两个数值之间的所有数据的 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 多条数据的空值条件查询(有可能一次只查出一条数据)
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 多条数据的精准查询(有可能一次只查出一条数据)
6.1 Django MariaDB&MySQL 所有数据的查询(有可能一次只查出一条数据)
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 某个范围内的所有数据查询(有可能一次只查出一条数据)
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 表中的所有数据为例)

[排错] Django 常见错误的解决

错误一:
1.1 在网页上出现的报错信息

DisallowedHost at /

Invalid HTTP_HOST header: '192.168.102.2:8000'. You may need to add '192.168.102.2' to ALLOWED_HOSTS.

Request Method: 	GET
Request URL: 	http://192.168.102.2:8000/
Django Version: 	1.11.6
Exception Type: 	DisallowedHost
Exception Value: 	

Invalid HTTP_HOST header: '192.168.102.2:8000'. You may need to add '192.168.102.2' to ALLOWED_HOSTS.

Exception Location: 	/root/project/django_env/lib64/python3.6/site-packages/django/http/request.py in get_host, line 113
Python Executable: 	/root/project/django_env/bin/python
Python Version: 	3.6.8
Python Path: 	

['/root/project/mysite',
 '/usr/lib64/python36.zip',
 '/usr/lib64/python3.6',
 '/usr/lib64/python3.6/lib-dynload',
 '/root/project/django_env/lib64/python3.6/site-packages',
 '/root/project/django_env/lib/python3.6/site-packages']

Server time: 	Thu, 27 Feb 2020 06:08:45 +0000

1.2 解决错误的方法

(django_env) [root@python mysite]# vi mysite/settings.py

将以下内容:

......
ALLOWED_HOSTS = []
......

修改为:

......
ALLOWED_HOSTS = ['*']
......

[内容] Django 单表数据的增加 (MariaDB 版)

注意:

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

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

正文:

内容目录:

内容一:配置 Django 环境
1.1 进入 Python 环境
1.2 引入 os 模块和 django 模块
1.3 调用 mysite.settings 的配置
1.4 让刚刚的调用生效
1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容

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

内容三:Django MariaDB&MySQL 数据的增加
3.1 方法一
3.1.1 方法一增加数据的操作
3.1.2 显示方法一增加数据的 SQL 语句
3.2 方法二
3.2.1 方法二增加数据的操作
3.2.2 显示方法二增加数据的 SQL 语句

具体的内容:
内容一:配置 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 *

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

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

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

内容三:Django MariaDB&MySQL 数据的增加
3.1 方法一
3.1.1 方法一增加数据的操作

>>> newitem = Movies(mid=10001,mname='test1',mdesc='test1',mimg='eternalcenter.com',mlink='eternalcenter.com')
>>> newitem.save()


补充:这里以添加一条
1) mid 字段的值为 10001
2) mname 字段的值为 test1
3) mdesc 字段的值为 test1
4) mimg 字段的值为 eternalcenter.com
5) mlink 字段的值为 eternalcenter.com
的数据为例

3.2.2 显示方法一增加数据的 SQL 语句

>>> showsql()
INSERT INTO `movies` (`mid`, `mname`, `mdesc`, `mimg`, `mlink`) VALUES (10001, 'test1', 'test1', 'eternalcenter.com', 'eternalcenter.com')


补充:这里以添加一条
1) mid 字段的值为 10001
2) mname 字段的值为 test1
3) mdesc 字段的值为 test1
4) mimg 字段的值为 eternalcenter.com
5) mlink 字段的值为 eternalcenter.com
的数据为例

3.2 方法二
3.2.1 方法二增加数据的操作

>>> Movies.objects.create(mid=10002,mname='test2',mdesc='test2',mimg='eternalcenter.com',mlink='eternalcenter.com')
<Movies: Movies object (10002)>


补充:这里以添加一条
1) mid 字段的值为 10002
2) mname 字段的值为 test2
3) mdesc 字段的值为 test2
4) mimg 字段的值为 eternalcenter.com
5) mlink 字段的值为 eternalcenter.com
的数据为例

3.2.2 显示方法二增加数据的 SQL 语句

>>> showsql()
INSERT INTO `movies` (`mid`, `mname`, `mdesc`, `mimg`, `mlink`) VALUES (10002, 'test2', 'test2', 'eternalcenter.com', 'eternalcenter.com')


补充:这里以添加一条
1) mid 字段的值为 10002
2) mname 字段的值为 test2
3) mdesc 字段的值为 test2
4) mimg 字段的值为 eternalcenter.com
5) mlink 字段的值为 eternalcenter.com
的数据为例

[内容] Django 单表数据的删除 (MariaDB 版)

注意:

1) 在删除 Django MariaDB&MySQL 数据之前要先创建一个链接了 MariaDB 数据库或 MySQL 数据库的 Django 项目

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

正文:

内容目录:

内容一:配置 Django 环境
1.1 进入 Python 环境
1.2 引入 os 模块和 django 模块
1.3 调用 mysite.settings 的配置
1.4 让刚刚的调用生效
1.5 调用 mysite 项目 movies 应用 models 模块里的所有内容

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

内容三:Django MariaDB&MySQL 数据的删除
3.1 方法一
3.1.1 方法一删除数据的操作
3.1.2 显示方法一删除数据的 SQL 语句
3.2 方法二
3.2.1 方法二删除数据的操作
3.2.2 显示方法二删除数据的 SQL 语句

具体的内容:

内容一:配置 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 *

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

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

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

内容三:Django MariaDB&MySQL 数据的删除
3.1 方法一
3.1.1 方法一删除数据的操作

>>> item = Movies.objects.filter(mid='5')
>>> item.delete()
(1, {'movies.Movies': 1})

(补充:这里以删除 movies 表里 mid 字段的值为 5 的数据)

3.1.2 显示方法一删除数据的 SQL 语句

>>> showsql()
DELETE FROM `movies` WHERE `movies`.`mid` = 5

(补充:这里以删除 movies 表里 mid 字段的值为 5 的数据)

3.2 方法二
3.2.1 方法二删除数据的操作

>>> Movies.objects.filter(mid='5').delete()
(1, {'movies.Movies': 1})

(补充:这里以删除 movies 表里 mid 字段的值为 5 的数据)

3.2.2 显示方法二删除数据的 SQL 语句

>>> showsql()
DELETE FROM `movies` WHERE `movies`.`mid` = 5

(补充:这里以删除 movies 表里 mid 字段的值为 5 的数据)