首页 > 其他分享 >ORM相关学习记录

ORM相关学习记录

时间:2023-04-07 11:14:10浏览次数:45  
标签:obj objects 记录 models list request 学习 ORM UserInfo

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>

 

标签:obj,objects,记录,models,list,request,学习,ORM,UserInfo
From: https://www.cnblogs.com/superip/p/17295544.html

相关文章

  • OpenAI Python API 训练营:学习使用 AI、GPT3 等!
    OpenAIPythonAPI训练营:学习使用AI、GPT3等!使用OpenAI强大的API在项目中生成文本和图像,探索人工智能的力量课程英文名:OpenAIPythonAPIBootcampLearntouseAI,GPT3,andmore!此视频教程共3.24GB,中英双语字幕,画质清晰无水印,源码附件全课程地址:https://xueshu.f......
  • 今天学习了html
    我是标题<html> <head> <title>我是标题</title> </head> <body> <h1> 我是1号标题 </h1> </body></html>以上就是我今天学习的html代码总结html应该控制下字符集,防止乱码html应该有个标题,titlehtml的标签有一定意义,大家不要创造标签......
  • 【C#学习】--委托
    .1委托.1.1概述委托(代理)关键字delegate,是一种程序特性,它是用来代表方法、表示方法的,用编程里的另一个说法:委托是方法的指针。我们首先看看通常的声明语法:intage=10;//这里整型变量age代表的是10这个整型值CoursemyCourse=newCourse();//这里将Course类实例化......
  • 《3D编程模式》写书-第2次记录
    大家好,目前我已经完成了“拼接模式”、“撤销重做模式”、“ECS模式”的初稿下面会给出它们的使用场景,如果您正好能用到,请联系我提前阅读模式的初稿,欢迎大家给出反馈建议,您的大名有机会出现在《3D编程模式》的书中,感谢!我的QQ号:395976266我的微信号:chaogex这里是所有的的写书......
  • 大神之路-起始篇 | 第4章.计算机科学导论之【数据运算】学习笔记
    [点击......
  • 记录一次免费云主机的白嫖经历
    地点:https://www.sanfengyun.com步骤:1.进入网站2.登录3.完成实名制4.首页找到免费云服务器 5.找到免费开通(按照流程走) 6.申请成功后安装好自己需要的系统   7.安装成功后,使用公网ip,系统账号密码就能远程ssh连接使用感受:整体来说就是免费云服务器,性能和花......
  • Algorithm参数记录
    一、vector<Point2f>vector是一个存储二维点坐标的容器,其中每个元素都是一个Point2f类型的对象。在OpenCV中,Point2f表示一个由两个单精度浮点数构成的二维点坐标。你可以使用vector来存储一些二维坐标信息,比如图像中的关键点或轮廓点等。具体用法可以参考下面的示例:#include<o......
  • flask_day04:请求上下文分析 wtforms
    目录回顾请求上下文分析(源码:request原理)导出项目的依赖pipreqs函数和方法threading.local对象本质原理:偏函数flask整个生命执行流程(1.1.4版本为例)wtforms(了解)补充回顾1.蓝图 第一步:导入第二步:实例化的得到的对象,可以指定static和templates第三步:app中注册蓝图,注册......
  • kettle从入门到精通 第十课 kettle switch/case、过滤记录、数值范围
    1、java代码里面有ifelse、switch-case等流程控制,kettle也有相应控件。下图便用到switch/case、过滤记录、数值范围控件。 2、 switch/case步骤1)步骤名称:可自定义2)switch字段:需要判断的字段,从前置步骤中选择3)使用字符串包含比较:如果勾选效果和java里面的contains一样,否则......
  • 蓝桥杯历年省赛真题做题记录(A组)(2022年第十三届)
    D题:选数异或考虑到异或的一个很好的性质,$A^B=x$等价于$A^x=B$。用$flag$数组记录一下数字$A[i]$是否出现过,出现过则$flag[A[i]]不等于0$。类似DP中分配任务模型的思想,这样我们只需要对每次$L,R$询问,判断之中有没有这样一对$(l,r)$数对使得$A[l]^A[r]==x$。因此设$d[i]$......