当前位置:   article > 正文

Django中models模型(操作数据库)_django models

django models

Django开发操作数据库更简单,内部提供了ORM框架
ORM的流程
在这里插入图片描述

ORM

ORM,全称 Object Relational Mapping (对象关系映射),通过 ORM 我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作实例,把字段作为属性, ORM 在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。

  • 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
  • 模型类的每个属性都相当于一个数据库的字段。

使用 ORM 有许多优点

  • 易用性:使用 ORM 做数据库的开发可以有效的减少重复SQL语句的概率,写出来的模型也更加直观、清晰。
  • 性能损耗小: ORM 转换成底层数据库操作指令确实会有一些开销。但从实际的情况来看,这种性能损耗很少(不足5%),只要不是对性能有严苛的要求,综合考虑开发效率、代码的阅读性,带来的好处要远远大于性能损耗,而且项目越大作用越明显。
  • 设计灵活:可以轻松的写出复杂的查询。
  • 可移植性: Django 封装了底层的数据库实现,支持多个关系数据库引擎,包括流行的 MySQL 、 PostgreSQL 和 SQLite ,可以非常轻松的切换数据库。

我们需要安装第三方模块

pip install mysqlclient
  • 1

ORM可以帮助我们做两件事:

  • 创建、修改、删除数据库中的表(不用你写SQL语句)
  • 操作表中的数据(不用写SQL语句)

自己创建数据库

  • 启动MySQL服务
  • 自带工具创建数据库
create database 名称 default charset utf8 collate utf8_general_ci
  • 1

连接数据库

在settings.py中DATABASES中修改

DATABASES = {
    'default' : {
        'ENGINE' : 'django.db.backends.mysql',
        'NAME' : 'dbname',
        'USER' : 'root',
        'PASSWORD' : '',
        'HOST' : '',
        'PORT' : '',
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Django操作表

models.py中创建类

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
  • 1
  • 2
  • 3
  • 4
python3 manage.py makemigrations
python3 manage.py migrate
  • 1
  • 2

注意:app需要提前注册
在这里插入图片描述
在这里插入图片描述
在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:

  • 手动输入一个值
  • 设置默认值
age = models.IntegerField(default=2)
  • 1
  • 允许为空
data = models.IntegerField(null=True,blank=True)
  • 1

以后在开发中如果想要对表结构进行调整:

  • 在models.py文件中操作类即可
  • 命令
python3 manage.py makemigrations
python3 manage.py migrate
  • 1
  • 2

数据库操作

新建

表名.objects.create(字段="")
  • 1

删除

使用delete()函数删除

表名.objects.filter(过滤条件).delete()  删除过滤条件
表名.objects.all().delete()   删除整个表
  • 1
  • 2

获取数据

all()函数整个表 获取的是QuerSet类型 [对象,对象,对象]

表名.objects.all()
  • 1

获取第一条数据[对象]

表名.objects.filter(id=1).first()
  • 1

更新数据

表名.objects.filter(id=2).update(age=999)
表名.objects.all().update(password=999)
表名.objects.filter(name="张三").update(age=999)
  • 1
  • 2
  • 3

实例:用户管理

1.展示用户列表

  • url
  • 函数
    • 获取所有用户信息
    • HTML渲染

2.添加用户

  • url
  • 函数
    • GET,看到页面,输入内容
    • POST,提交->写到数据库

3.删除用户

  • url
  • GET拼接url

list.html列出用户信息

 #list.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
<h1>用户列表</h1>
<a href="/add/">用户添加</a>

<table border="1">
    <thead>
    <tr>
        <th>id</th>
        <th>姓名</th>
        <th>密码</th>
        <th>年龄</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for obj in datelist %}
        <tr>
        <td>{{ obj.id }}</td>
        <td>{{ obj.name }}</td>
        <td>{{ obj.password }}</td>
        <td>{{ obj.age }}</td>
        <td>
            <a href="http://127.0.0.1:8000/delete/?nid={{ obj.id }}">删除</a>
        </td>
        </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

add.html添加用户页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加用户</title>
</head>
<body>
<h1>用户添加</h1>
<form method="post">
    {% csrf_token %}
    <input type="text" name="user" placeholder="用户名">
    <input type="password" name="pwd" placeholder="密码">
    <input type="text" name="age" placeholder="年龄">
    <input type="submit" value="提交">
</form>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

用户信息视图函数

def list(request):
    date_list = UserInfo.objects.all()

    return render(request,'list.html',{"datelist":date_list})
  • 1
  • 2
  • 3
  • 4

添加用户用户视图函数

def add(request):

    if request.method == "GET":
        return render(request,'add.html')
    user = request.POST.get("user")
    pwd = request.POST.get("pwd")
    age = request.POST.get("age")

    UserInfo.objects.create(name=user,password=pwd,age=age)

    return redirect("/list/")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

删除用户视图函数

def delete(request):
    nid = request.GET.get('nid')
    UserInfo.objects.filter(id=nid).delete()

    return redirect("http://127.0.0.1:8000/list")
  • 1
  • 2
  • 3
  • 4
  • 5

用户添加

在这里插入图片描述
用户列表

在这里插入图片描述
点击删除用户信息后

在这里插入图片描述

人生漫漫其修远兮,网安无止境。
一同前行,加油!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/142797
推荐阅读
相关标签
  

闽ICP备14008679号