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、链接数据库
image

三、字段的增删改查

(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('登入成功')
		elsereturn 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)
posted @   JudyJU  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示