ORM相关学习记录

1.orm项目

1.1安装orm

pip install  mysqlclient

如果windows安装报错后,使用whl安装

下载地址:https://pypi.org/project/mysqlclient/#files

找到对应python版本的wheel包,然后进行安装,可把包放到scripts目录中执行:

pip3.7 install mysqlclient-2.1.0-cp37-cp37m-win_amd64.whl

1.2orm作用

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

  • 创建,修改,删除数据库中的表(不用写SQL语句)--→无法创建数据库

  • 操作表中的数据(不用写SQL语句)

1.2.1创建数据库

  • 启动MYSQL数据库

  • 自带工具创建数据库

  • 配置setting.py中的database数据库链接mysql

参考文件:https://docs.djangoproject.com/en/4.1/ref/databases/

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xe',
        'USER': 'a_user',
        'PASSWORD': 'a_password',
        'HOST': '',
        'PORT': '',
    }
}

如图:

image.png

1.2.2数据库的操作

在models.py模块中进行操1.2.2.1创建表

1.2.2.1创建表

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField(max_length=3)
    data = models.IntegerField(null=True,blank=True)

执行命令:

python3.7 manage.py makemigrations
python3.7 manage.py migrate

image.png

在表中新增列时,由于已存在列可能已有数据,所以新增列必须要制定新增列对应的数据:

  • 手工输入一个值

  • 设置默认值

age = models.IntegerField(default=2)
  • 允许为空
data = models.IntegerField(null=True,blank=True)

1.2.2.2新增数据

简单示例,正常情况不在这个地方写数据

image.png

实际操作在views.py操作

#导入模块2个方法  from app01.models import department,UserInfo
from app01 import models
def orm(request):
    models.department.objects.create(title="运营部")
    models.department.objects.create(title="运维部")
    return HttpResponse("添加成功")

1.2.2.3删除表内容

#导入模块2个方法  from app01.models import department,UserInfo
from app01 import models
def orm(request):
    #删除ID=3的内容,条件可根据实际情况调整
    models.department.objects.filter(id=3).delete()
    #下面是删除表中所有内容
    #models.department.objects.all().delete()
    return HttpResponse("删除成功")

1.2.2.4 获取数据

#导入模块2个方法  from app01.models import department,UserInfo
from app01 import models
def orm(request):
    #获取所有数据
    data_list=models.department.objects.all()
    #获取第一条数据,就是条件后加first
    data_list=models.department.objects.filter(id=1).first()
    print(data_list)
    for obj in data_list:
        print(obj.title)

    return HttpResponse("成功")

1.2.2.5更新数据

#导入模块2个方法  from app01.models import department,UserInfo
from app01 import models
def orm(request):
    #获取所有数据,并更新对应列
    UserInfo.objects.all().update(password=999)
    #更新ID为5的年龄
    UserInfo.objects.filter(id=5).update(age=999)
    #更新名字为李小龙的年龄
    UserInfo.objects.filter(name="李小龙").update(age=999)   
    return HttpResponse("成功")

1.3案例

1.3.1HMTL读取数据库

1.3.1.2展示用户列表

def userlist(request):
    data_list=models.UserInfo.objects.all()
    return render(request,"user_list.html",{"data_list":data_list})
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <title>
    </title>
</head>
<body>
<h1>用户列表:</h1>
<div>
<table border="1">
    <thead>
        <tr>    
        <th>id</th>
        <th>用户名</th>
        <th>密码</th>
        <th>年龄</th>
    </tr>
    </thead>
    <tbody>
        {% for obj in data_list %}
<tr>
<td>{{obj.id}}</td>
<td>{{obj.name}}</td>
<td>{{obj.password}}</td>
<td>{{obj.age}}</td>
{%endfor%}
</tr>
    </tbody>
</table>
</div>
</body>
</html>

1.3.1.3添加用户

  • url

  • 函数

  • GET,看到页面,输入内容

  • POST,提交-→写入到数据库

def useradd(request):
    if request.method == "GET":
        return render(request,"user_add.html")
    else:
        username=request.POST.get("user")
        password=request.POST.get("pwd")
        age=request.POST.get("age")
        models.UserInfo.objects.create(name=username,password=password,age=age)
        return redirect("/user/list/")
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <title>
    </title>
</head>
<body>
<h1>添加用户:</h1>
<form method="POST" action="/user/add/">
    {%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.3.1.4 删除用户

  • url

  • 函数

  • GET,看到页面,输入内容

  • POST,提交-→写入到数据库

http://127.0.0.1:8000/user/delete/?nid=1
http://127.0.0.1:8000/user/delete/?nid=2
http://127.0.0.1:8000/user/delete/?nid=3

def 函数(request):
    nid=request.GET.get("nid")
    UserInfo.objects.filter(id=nid).delete()
    return HttpResponse ("删除成功")
def userdel(request):
  #获取NID使用GET
    nid=request.GET.get("nid")
    models.UserInfo.objects.filter(id=nid).delete()
    return redirect("/user/list/")
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <title>
    </title>
</head>
<body>
<h1>用户列表:</h1>

<div>
<table border="1">
    <thead>
        <tr>     
        <th>id</th>
        <th>用户名</th>
        <th>密码</th>
        <th>年龄</th>
        <th>删除</th>
    </tr>
    
    </thead>
    <tbody>
        {% for obj in data_list %}
<tr>
<td>{{obj.id}}</td>
<td>{{obj.name}}</td>
<td>{{obj.password}}</td>
<td>{{obj.age}}</td>
<td><a href="/user/delete/?nid={{obj.id}}">删除</a></td>
{%endfor%}
</tr>
    </tbody>

</table>

</div>

</body>

</html>

 

posted @ 2023-04-07 11:06  super_ip  阅读(17)  评论(0编辑  收藏  举报