头部背景图

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

:soogor 2022-05-04 11:57:22 :273
什么是Django ORM?ORM : 全称 object relational mapping, 对象关系映射功能 : 通过orm实现使用操作对象的方式来操作数据库中的数据目的 : 就是为了能够让不懂SQL语句的人通过python面向对象的知识点也能够轻松自如的操作数据库缺陷 : sql 封装死了, 有时候查询速度很慢ORM与数据库的映射关系是怎么样的?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 where name=usernamr

# 方式一 : 
user_obj = models.User.objects.filter(name=username)[0]
# 方式二 : 
user_obj = models.User.objects.filter(name=username).first()
# 推荐使用.first(). 但是其内部使用的也是通过索引取值


查询所有数据

# 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的情况

 

本文编辑:soogor
暂无评论,期待你的首评
cstring format(MFC中CString.Format格式问题)

[IT百科]cstring format(MFC中CString.Format格式问题)

若整数b大于等于6位则形式不变,若整数b大于等于6位则形式不变,例 %10f 若a的整数部分位数+小数点(1位)+小数部分位数大于
2022年9月29日 02:45
宝塔Django项目生成requirements.txt失败原因及解决办法

[Django]宝塔Django项目生成requirements.txt失败原因及解决办法

我们有时候需要将一个项目转到别的服务器,或移给别的项目做基础程序使用,这样我们就需要效取一下当前的运行环境。django可以很方便的让我们来进行这些操作宝塔Django...
2022年9月15日 21:55
Django项目如何修改文件自动重启,Django 远程API重启项目方法分享

[Django]Django项目如何修改文件自动重启,Django 远程API重启项目方法分享

我们在soogor CMS 中加了些特殊的配置,需要重启项目才可以生效。所以我们就需要一个自动或者远程重启的方法。下面就分享一下“Django项目如何修改文件自动重启,Django...
2022年9月15日 15:09
Request.Form和request.getParameter有什么区别?java SimpleDateFormat

[IT百科]Request.Form和request.getParameter有什么区别?java SimpleDateFormat

不需要前面补0的话就 M 就行,不是id2)虽然有多种方法得到,你想要什么样的就改成什么样就行了,比如Form的东西从Form对象取QueryString从QueryString方法获取java Simple...
2022年8月19日 04:00
Django内置模板标签和过滤器大全

[Django]Django内置模板标签和过滤器大全

内置模板标签和过滤器¶本文档介绍了 Django 的内置模板标签和过滤器。建议您使用自动文档(如果可用),因为这还将包括已安装的任何自定义标记或筛选器的文档。内置...
2022年8月12日 20:21
为什么会出现numberFormatException?java.lang.NumberFormatException: For input string: ““怎么解决

[IT百科]为什么会出现numberFormatException?java.lang.NumberFormatException: For input string: ““怎么解决

为什么会出现numberFormatExceptionNumberFormatException 他不会是IOException 肯定不会进入x1Exception是所有的异常基类 他会捕捉所有异常 自然包括数字格式化错误的...
2022年8月4日 20:30
WinForm的Textbox怎么自动换行?请教在textbox控件中如何实现自动换行

[IT百科]WinForm的Textbox怎么自动换行?请教在textbox控件中如何实现自动换行

WinForm的Textbox怎么自动换行要让一个Windows Form的TextBox显示多行文本就得把它的Multiline属性设置为true。 要让TextBox里面的文本换行大家往往会想到直接在要换行...
2022年7月13日 19:00
python批量删除django不需要的图片代码

[Python]python批量删除django不需要的图片代码

我们在使用soogorfactory批量生产文章图片的时候,会遇到这么一种情况,就是文章生成后,发现有重复生产的,或者因远程原因我们发布失败,这就造成了我们的图片多余了。...
2022年7月10日 22:24
SimpleDateFormat 为什么不是线程安全的?SimpleDateFormat parse format区别

[IT百科]SimpleDateFormat 为什么不是线程安全的?SimpleDateFormat parse format区别

SimpleDateFormat 为什么不是线程安全的  我们都知道jdk里面的SimpleDateFormat不是线程安全的,而commons-lang中的DateFormatUtils(或者说FastDateFormat)却是,非...
2022年6月21日 18:00
Django如何生成二维码?Django如何实现扫码浏览

[Django]Django如何生成二维码?Django如何实现扫码浏览

随着移动应用的越来越方便,我们在设置网站时就必须要考虑移动端的体验,甚至有的网站就直接不做PC端了,而只做移动端 。Soogr CMS一直就是推荐大家将网站做成自适应的...
2022年5月26日 00:28
Copyright © 2022 All Rights Reserved 山东上格信息科技有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.