Code前端首页关于Code前端联系我们

Django ORM数据库查询方法概述

terry 2年前 (2023-09-24) 阅读数 56 #后端开发

Django ORM 数据库查询方法汇总大全

什么是Django ORM?

ORM:全称object Relational Mapping,对象关系映射
功能:利用ORM通过操作对象来操作数据库中的数据
目的:让不懂SQL语句的人使用python的知识还可以利用对象的点轻松操作数据库
缺点:SQL没有封装,有时查询速度很慢

ORM与数据库的映射关系是怎样的?

ORM                        DB
  类 --------------------> 表
对象 --------------------> 数据行
属性 --------------------> 字段

ORM 的基本使用

1.创建类(表)
我们的模型类必须写在应用程序中的models.py文件中

from django.db import models

class Student(models.Model):
    """
    CharField 类型必须设置 max_length 参数
    verbose_name 是对字段的解释,每个字段都有,且是第一个默认形参,所以可以直接在第一个位置实参处写值不需要写verbose_name=
    null=True 允许字段为空
    default=0 设置默认值
    """
    # id int primary key auto_increment;(sql语句效果与下面orm语句相同)
    id = models.AutoField(primary_key=True,verbose_name="主键ID")
    # name varchar(32);
    name = models.CharField(max_length=32,verbose_name="名字")
    # age int;
    age = models.IntegerField(verbose_name="年龄")
    # pwd int;
    pwd = models.IntegerField("密码",null=True)
    is_delete = models.IntegerField(default=0)

主键列的描述

如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段
如果你想让主键字段名不叫id,儿叫叫uid、sid、pid等其他名字则需要自己手动指定

2。数据库迁移命令
每次更改 models.py 中数据库相关的代码时,都需要在项目目录下运行两条命令
这两条命令称为数据库迁移命令。比如我们创建顶层模型类,那么我们需要执行这两个命令

# 1.生成数据库同步脚本, 将数据库修改操作先记录下来(对应应用下的 migrations 文件夹)
python3 manage.py makemigrations

# 2.真正的数据库迁移操作
python3 manage.py migrate

在APP margrations文件夹中会生成0001_inital.py这样的文件

查看数据库中已经创建的表。

3。添加、删除、修改、检查字段
添加:添加字段代码并迁移数据库

sex = models.CharField('性别',max_length=16)
height = models.IntegerField('身高cm',null=True)  # 可以为空

删除:注释代码并执行数据库迁移命令(已删除字段对应的数据也会被删除)
更改:直接替换代码并运行数据库迁移命令
勾选:鼠标点击
4.添加、删除、修改数据

添加数据

# 假设获取到用户传入的数据
username = "shawn"
userpwd = 123
userage = 23

# insert into Student(name,age,pwd) values(username,userpwd,age);

# 方式一 : 
user_obj.models.Student.objects.create(name=username,pwd=passwd,age=userage)
# 方式二 : 
user_obj = models.Student(name=username,pwd=passwd,age=userage)
user_obj.save()

查询所有数据数据

# select * from Student;

# 方式一 : 
user_obj = models.User.objects.filter()
# 方式二 : 
user_obj = models.User.objects.all()  # [obj1,obj2,obj3]

修改数据

# 方式一 :
models.Student.objects.filter(id=edit_id).update(name=username,pwd=password)

# 方式二 : 
edit_obj = models.Student.objects.filter(id=edit_id).first()
edit_obj.name = username
edit_obj.pwd = password
edit_obj.save()

删除数据

# 直接删除
models.Student.objects.filter(id=edit_id).delete()

# 公司里删除数据并不会真正的删除, 而是在数据后面加一个字段来标志该数据有没有被删除
# 例如用 isdelete 字段来标识, 如果 isdelete=0 则未删除,如果 isdelete=1 则表示删除

Django ORM 查询语句汇总

#App为model名字
#查询所有内容
obj = models.App.objects.all()
#查询指定字段相关内容
obj = models.App.objects.filter(id=edit_id)
#给查询进行排序
#UpdateTime倒序
obj = models.App.objects.all().order_by('-UpdateTime')
#UpdateTime正序
obj = models.App.objects.all().order_by('UpdateTime')
#某字段最大值和最小值
obj = models.App.objects.aggregate(Max('age'),Min('age'))
#group by
#以ID统计数大小倒顺排列
obj = App.objects.values('Shi').annotate(Count_id=Count('id'), ).order_by('-Count_id')

Django ORM 查询大小关系:

__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
exclude 不等于 
j = Job.objects.filter().exclude(status="0").all()#排除status=0的情况

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门