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': '',
}
}
如图:
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
在表中新增列时,由于已存在列可能已有数据,所以新增列必须要制定新增列对应的数据:
-
手工输入一个值
-
设置默认值
age = models.IntegerField(default=2)
- 允许为空
data = models.IntegerField(null=True,blank=True)
1.2.2.2新增数据
简单示例,正常情况不在这个地方写数据
实际操作在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>
本文来自博客园,作者:super_ip,转载请注明原文链接:https://www.cnblogs.com/superip/p/17295544.html