1105. 模型基础

发布时间 2023-05-22 10:27:43作者: 興華

一、Django的ORM简介

1. ORM系统

概念:对象关系映射(Object Relational Mapping,简称ORM)

优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

2. django模型映射关系

① 模型类必须都写在app下的modles.py文件中

② 模型如果需要映射到数据库,所在的app必须被安装

③ 一个数据表对应一个模型类,表中的字段,对应模型中的类属性

二、数据库连接配置

1. 在setting.py中配置DATABASES

创建一个管理员用户moran账号,密码qwe123:

CREATE USER 'moran'@'%'IDENTIFIED BY 'qwe123';

给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。

GRANT ALL ON *.* TO 'moran'@'%';

使授权立即生效:

FLUSH PRIVILEGES;

2. pymysql数据库连接器的配置:

① 在虚拟环境中安装pymysql: pip install pymysql -i https://pypi.douban.com/simple

② 设置连接器为pymysql:

在主目录__init__.py文件添加以下两行代码:

# __init__.py文件
import
pymysql pymysql.install_as_MySQLdb()

三、模型的创建与映射

1. 在app下面的models.py中创建django的模型类:

2. 将模型类映射到数据库:

① 首先执行以下命令,要创建映射文件

python manage.py makemigrations  [app name] 

注:命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行。

② 执行以下命令,将映射文件中的映射数据提交到数据库中

python manage.py migrate

注: 在执行以上命令前,要保证我们创建模型的app是已经注册过的app。

执行完以上命令后,在数据库中可以查询到创建的以app名_模型名的数据表,二其他的一些表格是django自动生成的。

注: 如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除。

四、数据的增删改查

1. 增加数据

在视图函数中导入User模型类,然后使用下面的方法添加数据

from .models import User

def add_user(request):
    # 方法一
    taka =  User(name='taka', age=18)
    taka.save()

    # 方法二
    xiaopo = User()
    xiaopo.name = 'xiaopo'
    xiaopo.age = 18
    xiaopo.save()

    # 方法三
    User.objects.create(name='xiaoming', age=20)

    # 方法四
    User.objects.get_or_create(name='xiaohong', age=21)
    return HttpResponse('插入数据成功!')

2. 查找数据

在视图函数中导入User模型类,实现简单的查找

from .models import User

def search_user(request):
    # 查询所有记录对象
    rs = User.objects.all()
    
    # 查询一个记录对象
    rs = User.objects.get(id=1)

    # 获取满足条件的对象
    rs = User.objects.filter(name='xiaoming')
    print(rs)
    return HttpResponse('查询数据成功!')

注:数据库相关的接口(QuerySet API)

① 从数据库总查询出来的结果一般是一个集合,这个集合叫做QuerySet

② QuerySet是可迭代对象

③ QuerySet支持切片,不支持复索引

④ 可以用list强行将QuerySet变成列表

3. 修改数据

在视图函数中导入User模型类,然后使用下面的方法更新数据

from .models import User

def update_user(request):
    # 先查询到再属性赋值修改
    rs = User.objects.get(name='xiaoming')
    rs.name = 'Xiaoming'   # 简单的变更首字母大小写
    rs.save()

    # 使用update方法直接修改
    User.objects.filter(name='Xiaoming').update(name='XM')
    User.objects.all().update(city="wuhan")     
    return HttpResponse("更新数据成功!")

4. 删除数据

在视图函数中导入User模型类,然后使用下面的方法删除数据

from .modles import User

def delete_user(request):
    User.objects.get(id=1).delete()
    User.objects.filter(age=18).delete()
    User.objects.all().delete()
    return HttpResponse("删除数据成功!")