Django(3)ORM
ORM
一、定义
orm是对象关系的映射,它的目的就是为了能够让不懂sql语句的人通过python面向对象知识点也能轻松自如得操作数据库,但是也有缺点,sql封装死了,有时候查询起来速度很慢
对应关系
类-->表
对象-->表里面的数据
对象点属性-->字段对应的值
二、实操
1、模型类写在应用下面的models.oy文件中
from django.db import models
# Create your models here.
class User(models.Model):
id = models.AutoField(primary_key=True)
# id int primary key auto_increment
name = models.CharField(max_length=32)
# name carchae(31)
age = models.IntegerField()
# age int
2、数据库迁移命令:
(1) python3 manage.py makemigrations # 就是将数据库修改操作先记录下来
(2) python3 manage.py migrate # 这才是真正的数据迁移操作
-->注意:只要动了models.py的数据必须执行上述两条操作
(3)如果不指定主键,会自动生成一个名为id的主键字段
(4)如果主键字段想要叫别的名字那么必须得是自己写
3、链接数据库
三、字段的增删改查
(1) 增 增加字段只需要在models.py中增加字段即可
class User(models.Model): # 创建一张user表
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, verbose_name="用户名") -->verbose_name="" 给字段加上一个中文注释 或者可以直接写“用户名
age = models.IntegerField()
pwd= models.IntegerField(null=True) --->为新增的字段
# 新增字段可以写上null=true,也可以写上default=0,但是必须写,不然加不上。接下来就是执行迁移命令
(2) 改 改字段直接改代码就可以+执行迁移命令
(3) 删 注释代码+执行迁移命令
四、数据的增删改查
(1) 数据查询 filter关键字
def login(request):
if request.method=='POST':
username=request.POST.get('username')
pwd=request.POST.get('password')
user_obj=models.Users.objects.filter(name=username,password=pwd)
res=user_obj.first()
if obj:
return HttpResponse('登入成功')
else:
return HttpResponse('用户名或密码错误')
return render(request,login.html)
(2) 添加数据 create关键字
models.Users.objects.filter(name=username,password=pwd)
(3) 改动数据 update关键字
(4)展示数据
🌼后端视图层
def data(request):
user_data = models.User.objects.all()-->拿所有的数据
return render(request, 'data.html', {'userdata': user_data})-->模版语法将数据传给前端
🌼 前面html页面
<table class="table table-striped table-hover">
<thead>
<tr>
<th>序号</th>
<th>名字</th>
<th>密码</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for user_obj in userdata %}
<tr>
<td>{{user_obj.id}}</td>
<td>{{user_obj.name}}</td>
<td>{{user_obj.pwd}}</td>
<td>
<a href="/edit/?edit_id={{user_obj.id}}">编辑</a>
<a href="/delete/?delete_id={{user_obj.id}}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
五、创建外键
1、表与表的关系:一对多,一对一,多对多
2、针对外键字段的创建位置
一对多:创建在查询需求较多的一方
一对一:推荐创建在查询频率较高的的地方
多对多:orm会自动创建出第三张表
class Bookz(models.Model):
title = models.CharField(verbose_name='书名', max_length=32)
price = models.DecimalField(verbose_name='价格', max_digits=8, decimal_places=2)
publish_time = models.DateField(verbose_name='出版时间', auto_now_add=True)
publish = models.ForeignKey(to='Publishz') # 一对多
Authors = models.ManyToManyField(to='Authorz') # 多对多
class Publishz(models.Model):
title = models.CharField(verbose_name='名称', max_length=32)
addr = models.CharField(verbose_name='地址', max_length=128)
emial = models.EmailField(verbose_name='邮箱')
class Authorz(models.Model):
name = models.CharField(verbose_name='姓名', max_length=32)
age = models.IntegerField(verbose_name='年龄')
author_Detail = models.OneToOneField(to='AuthorDetailz') # 一对一
class AuthorDetailz(models.Model):
phone = models.BigIntegerField(verbose_name='电话')
addr = models.CharField(verbose_name='地址', max_length=32)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!