前面视图层,模板层、路由层都写了大概,项目肯定是会和数据库打交道,那就讲讲orm的单表查询吧,直接写过一点点,不太全面。
1、项目刚创建好,我们需要在settings里配置一下(用mysql数据库),配置好了,再去app文件夹里的__init__配置下,其实在
哪个__init__配置都一样,项目启动时,首先是执行__init__文件。下面直接贴代码了。
setting文件里:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '', 'NAME': 'zhuyu', } }
__init__文件里:
import pymysql pymysql.install_as_MySQLdb() #还是写写为什么吧,前面也写过,再写一次。 #首先django里mysql用的是MySQLdb,但是python3.x现在不支持MySQLdb了,所引在项目启动时,将MySQLdb转成pymysql #你是python2.x的可以不用写。
2、上面的配置配置好了,你就可以在models.py写orm了,我以Student为例
class Student(model.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.CharField(max_length=32) balance = models.CharField(max_length=32)
3、数据库迁移命令我就不写了,对数据库操作无非就是增删改查
增加:
方式一:
ret = models.Student.object.create(name='zhuyu',age=21,balance='5000') #这里的ret是学生对象
方式二:
zhanghao = models.Student(name='zhanghao',age=22,balance='4000) zhanghao.save() #先实例一个学生对象,再调用学生对象的方法,我们没写,调用的肯定是它基类的方法。
修改:
方式一:
ret = models.Student.object.filter(name='zhuyu').update(balance='9999) #返回值ret是对数据库影响的行数, #a = models.Student.object.filter(name='zhuyu'),a是一个queryset对象,所以update是它的一个方法
方式二:
那么我Student对象有没有update方法呢?
ret = models.Student.object.filter(name='zhuyu').first().update(balance='9999')
答案是会报错的!!!!!,记住对象是没有update方法的!!!!!
那我对象怎么修改呢?
ret = models.Student.object.filter(name='zhuyu').first() ret.balance = '8888' ret.save() #很简单,拿到修改对象,该属性值,调用save()方法就行
删除:
ret = models.Student.object.filter(name='zhuyu') ret.delete() #这里的ret是queryset对象,调用的是它的delete方法
继续上面的方法,对象有没有delete方法呢?
ret = models.Student.object.filter(name='zhuyu').first() ret.delete() #ret就是学生对象了,结果显示能成功删除!所以对象是有delete方法
增删改上面就写完了,下面主要写写查询吧。
1、all 查询所有的结果:
ret = models.Student.object.all() #ret是queryset对象
2、filter 筛选符合条件的:
ret = models.Student.object.filter(name='zhuyu') # ret为queryset对象,姑且就是一个列表吧,装着一个一个对象
3、first 查询符合条件的第一个对象
ret = models.Student.object.filter(balance='5000').first() # ret没啥好说的,一个对象,上面写了queryset对象姑且为列表,那么就可以索引取值了, # 我们再看first()方法,它是取了queryset对象的索引0最为返回值,那么我也可以取 ret = models.Student.object.filter(balance='5000')[0] # 注意:是可以通过索引取值,但是索引不能为负数!!
4、last 查询符合条件的最后一个对象
ret = models.Student.object.filter(balance='2000').last() # ret是学生对象,前面不是说queryset对象是不能取负数嘛,那最后一个用-1 # 肯定会报错,那么last怎么实现的呢? # reverse查询的结果进行反转,看下面这句代码 ret = models.Student.object.filter(balance='2000').reverse().first() # last()原理就是这样实现的
5、exclude 筛选出不符合条件的
ret = models.Student.object.exclude(age=20) # ret 为queryset对象 # exclude和filter一样,可以跟多个条件,用逗号分开 ret = models.Student.object.exclude(age=20,name='zhuyu') # 查询出不是name为朱宇,并且年龄为20的所有学生,相当于and
6、count 查看queryset对象里的个数
ret = models.Student.object.all() # ret为一个整型
7、order_by 排序
# 以学生年龄从小到大排序 ret = models.Student.object.order_by('age') # ret为queryset对象 # 以学生年龄从大到小排序 ret = models.Student.object.order_by('-age') # 我认为实现方法为,先取出一个条件(也就是字符串),取索引0,看是否为'-',是的话 # 取索引1到最后为条件,再转换sql语句时,ASC改为DESC,排序方式改变。
8、reverse 结果取反
ret = models.Student.object.order_by('age').reverse() # ret为queryset对象,年龄从大到小排序。
9、exists 判断queryset对象里是否有数据嘛
它的返回值就是True False
10、values和values_list
values:它是queryset对象的方法,它的返回值也是queryset对象,里面是一个大列表装着一个一个字典
字典里的key就是values里的值
values_list:queryset对象的方法,它的返回值也是queryset对象,里面是一个大列表一个一个元组,元组的值就是values_list里所取到的值。
11、distinct 去重,不用多说了,queryset对象的方法。
12、get 也是取出符合条件的一个,但是那个条件必须是唯一的,必须存在的。
假如:取出叫zhuyu的学生,叫zhuyu的学生不止一个,那么你用get就会报错取出叫dsb的学生,如果没有,你用get就会出错。
上面就是一些单表查询的方法,发现没有,为何每个返回值,我都要写什么类型,大多数就是queryset类型,所以只要前面
是queryset对象,我们都可以用到它的方法,比如:取出学生balance为5000,且按照年龄从小到大排序。
下面写写基于双下划线的模糊查询
# 查询学生年龄为12,16,13的学生 models.Student.object.filter(age__in=[13,13,16]) # 查询学生年龄大于12的学生 models.Student.object.filter(age__gt=12) # 查询学生年龄小于12的学生 models.Student.object.filter(age__lt=12) # 查询学生年龄大于等于12的学生 models.Student.object.filter(age__gte=12) # 查询学生年龄小于等于12的学生 models.Student.object.filter(age__lte=12) # 查询学生名字中有宇的学生 models.Student.object.filter(name__contains='宇') # 查询学生名字以朱开头的学生 models.Student.object.filter(name__startswith='朱')
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Django框架表单操作实例分析,包括了Django框架表单操作实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django框架表单操作。分享给大家供大家参考,具体如下: HTML表单是网站交互性的经典方式。 开始学习如何用Django对用户提交的表单数据进行处理。 HTTP 请求 HTTP协议以"请求-回复"的方式工作。客户发送请求时,可以在请求中附加数据。服务器通
本文向大家介绍springdata jpa单表操作crud的实例代码详解,包括了springdata jpa单表操作crud的实例代码详解的使用技巧和注意事项,需要的朋友参考一下 1. 项目搭建 使用boot整合,导入springdata jap, mysql 驱动,lombok,web。 1.1 配置 1.2 实体类 1.3 继承JpaRepository接口 2. 批量新增 业务类 测试 3.
本文向大家介绍Python3 pandas 操作列表实例详解,包括了Python3 pandas 操作列表实例详解的使用技巧和注意事项,需要的朋友参考一下 1.首先需要安装pandas, 安装的时候可能由依赖的包需要安装,根据运行时候的提示,缺少哪个库,就pip 安装哪个库。 2.示例代码 总结: 只要学会把excel文件内容读取处理,进行相关的增删修改,最后调用 .to_excel()方法便可以
本文向大家介绍Javascript操作表单实例讲解(下),包括了Javascript操作表单实例讲解(下)的使用技巧和注意事项,需要的朋友参考一下 在上篇文章给大家介绍了js操作表单实例讲解(下)的相关知识,本文接着给大家介绍Javascript操作表单实例讲解(下),具体详情如下所示: 一、文本域 ----------------------------- 操作文本域的值 value 属性 设置
本文向大家介绍JavaScript操作表单实例讲解(上),包括了JavaScript操作表单实例讲解(上)的使用技巧和注意事项,需要的朋友参考一下 一、获得表单引用 1>通过直接定位的方式来获取 2>通过集合的方式来获取引用 3>通过name直接获取“(只适用于表单) 二、获得表单元素的引用 1>直接获取 2>通过集合来获取 3>直接通过name的形式 表单对象.name 三、表单元素共同的属性和
本文向大家介绍javascript实现表格增删改操作实例详解,包括了javascript实现表格增删改操作实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript实现表格增删改操作的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。