Django orm基本crud方法大全!!所有操作只看一篇文章就够了!!

话不多说 直接上方法
这里用到的数据结构为

class something(models.Model):
    id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入
    name = models.CharField(max_length=32) # 名称
    price = models.DecimalField(max_digits=5, decimal_places=2) # 价格
    date = models.DateField() # 时间
    

1.添加数据

1.1 一般方法

实例化对象来保存数据,但是需要使用save才会存入数据

from app01 import models 
def add(request):
    thing = models.something(name="镁铝",price="300",date="2020-9-24") 
    thing.save()
    return HttpResponse("<p>数据添加成功!</p>")

1.2 ORM(推荐)

通过 ORM 提供的 objects 提供的方法 create 来实现

from app01 import models 
def add(request):
    thing = models.something.objects.create(title="衰哥",price="200",date="2020-9-24") 
    return HttpResponse("<p>数据添加成功!</p>")

2.查询数据

1.1 all() 查询所有数据

使用 all() 方法来查询所有内容。

返回的是 QuerySet 类型数据,类似于 list,里面放的是一个个模型类的对象,可用索引下标取出模型类的对象。

def all(request):
    thing = models.something.objects.all() 
    print(thing,type(thing)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。
    for i in thing:
    	print(i.name)
    return HttpResponse("<p>查找成功!</p>")

2.2 filter() 方法用于查询符合条件的数据

返回的是 QuerySet 类型数据,类似于 list,里面放的是满足条件的模型类的对象,可用索引下标取出模型类的对象。

pk=3 的意思是主键 primary key=3,相当于 id=3。

因为 id 在 pycharm 里有特殊含义,是看内存地址的内置函数 id(),因此用 pk。

def filter(request):
    thing = models.something.objects.filter(pk=3)
    print(thing)
    thing = models.something.objects.filter(price=200)
    for i in thing:
    	print(i.name)
    return HttpResponse("<p>查找成功!</p>")

2.3 exclude() 方法用于查询不符合条件的数据。

返回的是 QuerySet 类型数据,类似于 list,里面放的是不满足条件的模型类的对象,可用索引下标取出模型类的对象。

def exclude(request):
    thing = models.something.objects.exclude(pk=3)
    print(thing)
    books = models.Book.objects.exclude(price=200)
    for i in thing:
    	print(i.name)
    return HttpResponse("<p>查找成功!</p>")

2.4 get()

方法用于查询符合条件的返回模型类的对象符合条件的对象只能为一个,如果符合筛选条件的对象大于一个,或没有一条符合都会报错

def get(request):
##假设有几条数据
##ID=5,PRICE=200
##ID=6,PRICE=200

    thing = models.something.objects.get(pk=5)
    thing = models.something.objects.get(pk=18)  # 报错,没有符合条件的对象
    thing = models.something.objects.get(price=200)  # 报错,符合条件的对象超过一个
    for i in thing:
    	print(i.name)
    return HttpResponse("<p>查找成功!</p>")

2.5 order_by() 方法用于对查询结果进行排序。

返回的是 QuerySet类型数据,类似于list,里面放的是排序后的模型类的对象,可用索引下标取出模型类的对象。

注意:

a、参数的字段名要加引号。
b、降序为在字段前面加个负号 -。

def order_by(request):
    thing = models.something.objects.order_by("price") # 查询所有,按照价格升序排列 
    thing = models.something.objects.order_by("-price") # 查询所有,按照价格降序排列
    return HttpResponse("<p>查找成功!</p>")

2.6 reverse() 方法用于对查询结果进行反转。

返回的是 QuerySe t类型数据,类似于 list,里面放的是反转后的模型类的对象,可用索引下标取出模型类的对象。

def reverse(request):
    # 按照价格升序排列:降序再反转
    thing = models.something.objects.order_by("-price").reverse()
    return HttpResponse("<p>查找成功!</p>")

2.7 count() 方法用于查询数据的数量返回的数据是整数。

def count(request):
    thing = models.something.objects.count() # 查询所有数据的数量 
    #高级用法
    thing = models.something.objects.filter(price=200).count() # 查询符合条件数据的数量
    return HttpResponse("<p>查找成功!</p>")

2.8 first() 方法返回第一条数据返回的数据是模型类的对象。

def first(request):
    some = models.something.objects.first() # 返回所有数据的第一条数据
    return HttpResponse("<p>查找成功!</p>")

2.9 last() 方法返回最后一条数据返回的数据是模型类的对象。

def last(request):
    some = models.something.objects.last() # 返回所有数据的最后一条数据
    return HttpResponse("<p>查找成功!</p>")

2.10 exists() 方法用于判断查询的结果 QuerySet 列表里是否有数据。

返回的数据类型是布尔,有为 true,没有为 false。

注意:判断的数据类型只能为 QuerySet 类型数据,不能为整型和模型类的对象。

def exists(request):
    thing = models.something.objects.exists()
    # 报错,判断的数据类型只能为QuerySet类型数据,不能为整型
    thing = models.something.objects.count().exists()
    # 报错,判断的数据类型只能为QuerySet类型数据,不能为模型类对象
    thing = models.something.objects.first().exists()  
    return HttpResponse("<p>查找成功!</p>")

2.11 values() 方法用于查询部分字段的数据。

返回的是 QuerySet 类型数据,类似于 list,里面不是模型类的对象,而是一个可迭代的字典序列,字典里的键是字段,值是数据。

注意:

  • 参数的字段名要加引号
  • 想要字段名和数据用 values
def values(request):
    # 查询所有的id字段和price字段的数据
    thing = models.something.objects.values("pk","price")
    print(thing[0]["price"],type(thing)) # 得到的是第一条记录的price字段的数据
    return HttpResponse("<p>查找成功!</p>")

2.12 values_list() 方法用于查询部分字段的数据。

返回的是 QuerySet 类型数据,类似于 list,里面不是模型类的对象,而是一个个元组,元组里放的是查询字段对应的数据。

注意:

  • 参数的字段名要加引号
  • 只想要数据用 values_list
def values_list(request):
    # 查询所有的price字段和publish字段的数据
    thing = models.something.objects.values_list("price","publish")
    print(thing)
    print(thing[0][0],type(thing)) # 得到的是第一条记录的price字段的数据
    return HttpResponse("<p>查找成功!</p>")

2.13 distinct() 方法用于对数据进行去重。

返回的是 QuerySet 类型数据。

注意:

  • 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。
  • distinct() 一般是联合 values 或者 values_list 使用。
def distinct(request):
    # 查询一共有几种价格
    thing = models.something.objects.values_list("price").distinct() 
    # 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。
    thing = models.something.objects.distinct()
    return HttpResponse("<p>查找成功!</p>")

2.14 filter() 方法基于双下划线的模糊查询(exclude 同理)。

注意:filter 中运算符号只能使用等于号 = ,不能使用大于号 > ,小于号 < ,等等其他符号,但是有专门的符号来代替,看下面的代码块!!!!!。

注意:为双下划线!!!!
__in
用于读取区间,= 号后面为区间 。

def filter(request):

    # 查询价格为200或者300的数据
    books = models.Book.objects.filter(price__in=[200,300])
    
    #__gt 大于号 ,= 号后面为数字。
	# 查询价格大于200的数据 
	books = models.Book.objects.filter(price__gt=200)
	
	#__gte 大于等于,= 号后面为数字。
	# 查询价格大于等于200的数据 
	books = models.Book.objects.filter(price__gte=200)
	
	#__lt 小于,=号后面为数字。
	# 查询价格小于300的数据 
	books=models.Book.objects.filter(price__lt=300)
	
	#__lte 小于等于,= 号后面为数字。
	# 查询价格小于等于300的数据 
	books=models.Book.objects.filter(price__lte=300)

	#__range 在 ... 之间,左闭右闭区间,= 号后面为两个元素的区间。
	books=models.Book.objects.filter(price__range=[200,300])

	#__contains 包含,= 号后面为字符串。
	books=models.Book.objects.filter(name__contains="喔喔")
	
	#__icontains 不区分大小写的包含,= 号后面为字符串。
	books=models.Book.objects.filter(name__icontains="python") # 不区分大小写

	#__startswith 以指定字符开头,= 号后面为字符串。
	books=models.Book.objects.filter(name__startswith="喔喔")

	#__endswith 以指定字符结尾,= 号后面为字符串。
	books=models.Book.objects.filter(name__endswith="喔喔")

	#__year 是 DateField 数据类型的年份,= 号后面为数字。
	books=models.Book.objects.filter(date__year=2008)

	#__month 是DateField 数据类型的月份,= 号后面为数字。
	books=models.Book.objects.filter(date__month=10)

	#__day 是DateField 数据类型的天数,= 号后面为数字。
	books=models.Book.objects.filter(date__day=01)  
    return HttpResponse("<p>查找成功!</p>"

3.删除

3.1 delete() 使用模型类删除

thing=models.something.objects.filter(pk=8).first().delete()

delete() 使用 QuerySet 删除 (推荐)

thing=models.something.objects.filter(pk__in=[1,2]).delete()

4.修改

4.1 通过拿到模型重新赋值再次执行save方法

thing = models.something.objects.filter(pk=7).first() 
thing.price = 400 
thing.save()

4.2 update 使用QuerySet修改(推荐)

 thing = models.something.objects.filter(pk__in=[7,8]).update(price=888)
    return HttpResponse(thing)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django自带的ORM是一个Python对象关系映射工具,它可以让开发者使用Python语言进行数据库操作,而不需要手写SQL语句。 使用Django自带的ORM进行数据库操作的步骤如下: 1. 定义模型类:在Django应用的models.py文件中定义模型类,其中每个模型类对应一个数据库表。 2. 进行迁移:运行python manage.py makemigrations命令生成数据库迁移文件,再运行python manage.py migrate命令将模型类映射到数据库表。 3. 进行CRUD操作:使用模型类提供的方法进行数据库的增删改查操作,如: - 创建对象:使用模型类的save()方法或create()方法创建新的数据库记录。 - 查询对象:使用模型类的objects属性进行查询,可以使用filter()、get()、all()等方法进行过滤和排序。 - 更新对象:使用模型类的save()方法或update()方法更新数据库记录。 - 删除对象:使用模型类的delete()方法删除数据库记录。 示例代码: ```python # 定义模型类 from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) price = models.DecimalField(max_digits=5, decimal_places=2) pub_date = models.DateField() is_published = models.BooleanField(default=True) # 创建对象 book = Book(title='Python入门', author='张三', price=29.99, pub_date='2022-01-01') book.save() # 查询对象 books = Book.objects.filter(author='张三').order_by('-price') for book in books: print(book.title, book.price) # 更新对象 book.price = 39.99 book.save() # 删除对象 book.delete() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值