Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查

Django

  1. Django的ORM简介
  2. 数据库连接配置
  3. 模型的创建与映射
  4. Django之Model字段详解
  5. 数据库的增删改查
    1. 增数据
    2. 查数据及补充
    3. 改数据
    4. 删数据

 

 

Django的ORM系统分析

Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

  1. ORM概念:对象关系映射(Object Relational Mapping,简称ORM)
  2. ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

Django的模型映射关系

Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

  • 模型类必须都写在app下的models.py文件中。
  • 模型如果需要映射到数据库,所在的app必须被安装.
  • 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.

 

数据库的配置

 在项目的settings文件中的DATABASES

注意:NAME是数据库的库名,在使用之前,需要先在数据库中新建一个对应名字的database

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.msyql',
        'NAME': database_name,
        'USER': username,
        'PASSWORD': password,
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}
  •  创建一个管理员用户pywjh账号,密码为 pywjh:CREATE USER 'pywjh'@'%'IDENTIFIED BY 'pywjh';
  • 给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
    • GRANT ALL ON *.* TO 'pywjh'@'%';
  • 使授权立即生效:FLUSH PRIVILEGES;

pymsql数据库连接器的配置

设置连接器为pymysql:
主目录下的的__init__.py文件添加下面两句

import pymysql
pymysql.install_as_MySQLdb()



使用Django中的模型

 首先,在哪个APP下创建模型,都要先在settings中注册APP

APP  my_sql下的models.py

from django.db import models


# Create your models here.
class User(models.Model):
    id = models.AutoField(primary_key=True) # id属性,不用添加Django也会自动添加
    name = models.CharField(max_length=10)
    age = models.IntegerField()

    def __str__(self):   # 定义输出方法,在查询的时候使用
        return 'User<id=%s, name=%s, age=%s>'%(
            self.id, self.name, self.age
        )
 然后在创建映射文件:( 后面可以跟APP的名字,不跟则表示全部都映射)
python manage.py makemigrations [app_name]

将映射数据提交到数据库中:

python manage.py migrate [app_name]

 这是就会在数据库中看到自己创建的模型

Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

打开数据我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.


 

 数据库的增删改查

增:

 配置到url后,在视图views中:

from django.http import HttpResponse
from .models import User

def add(request):
    # # 方法一
    # user = User()
    # user.name = '张三'
    # user.age = 22
    # user.save()
    # # 方法二
    # user = User(name='李四', age=23).save()
    # # 方法三
    # User.objects.create(name='王五', age=22)
    # 方法四
    User.objects.get_or_create(name='周六', age=24) # 这个方法不会重复添加

    return HttpResponse('添加数据成功')

 检查数据库:

Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

查:

views中:

查看全部数据

from django.http import HttpResponse
from .models import User

def get(request):
    # 获取全部数据
    result = User.objects.all()
    print(result)
    return HttpResponse('查询数据成功')

User.objects.all()——后台输出:

Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

查询一个数据:

def get(request):
    # 查村一个数据
    result = User.objects.get(id=1)
    print(result)

    return HttpResponse('查询数据成功')

 Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

查询满足条件的数据:

def get(request):
    # 查询满足条件的数据
    result = User.objects.filter(name='王五')
    print(result)

    return HttpResponse('查询数据成功')

 Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

注意:

  • 通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的__str__的格式.
  • all()和filter()方法返回的是QuerySet对象.
  • get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!
  • 1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
  • 2.QuerySet是可迭代对象.
  • 3.QuerySet支持切片, 不支持负索引.
  • 4.可以用list强行将QuerySet变成列表.

补充:

获取一个属性的搜索数据:

def get(request):
    # 单独获取一个属性的全部数据
    result = User.objects.values('age')
    print(result)

    return HttpResponse('查询数据成功')

Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

去重:

def get(request):
    # 单独获取一个属性的全部数据,并去重
    result = User.objects.values('age').distinct()
    print(result)

    return HttpResponse('查询数据成功')

Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

改:

在操作之前,先在models中在添加一个city的属性,规定模型添加属性要加上默认值,不要忘记创建映射文件已经映射数据

from django.db import models


# Create your models here.
class User(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=10)
    age = models.IntegerField()
    city = models.CharField(max_length=20, default='北京')

    def __str__(self):
        return 'User<id=%s, name=%s, age=%s>'%(
            self.id, self.name, self.age
        )

映射文件以后再查看数据库:

Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

views:

def update(request):
    # 先查找到数据在进行修改
    res = User.objects.get(name='张三')
    res.city = '武汉'
    res.save()
    # 用update直接修改 # update针对的是QuerySet类型的数据
    User.objects.filter(name='李四').update(city='重庆')
    return HttpResponse(' 数据修改成功')

 Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查

删:

所有的方法都是用与delete方法

def delete(request):
    result = User.objects.get(id=1)
    result.delete()

    User.objects.filter(name='周六').delete()
    return HttpResponse('删除数据成功')

 Django——6 模型基础ORM  数据库连接配置  模型的创建与映射  数据的增删改查