django中使用filter()(即对QuerySet操作)时踩的坑

代码伺候:

  先看如下代码:

例1:

         message = Message.objects.filter(pk=message_id2)

            message[0].id = message_id2
            message[0].content = content2
            message[0].message_type = message_type2
       print(message[0].id)
       print(message[0].content)

            message[0].save()

 

  可正常从QuerySet中读取数据,并打印出来,无误。可是无法将数据同步到数据库中。

  

      (1)all()返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。

         例如有Book表,其包含bookname,booknum两个属性, 如何使用Objects.all(),得到bookname和booknum的值

 (2)filter() 返回的是QuerySet对象,与all()相似,只是all()是查询所有数据,常用:filter表示‘ = ’,exclude表示’ != ’。

   (3)get()返回的是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据。

  

  来看一个QuerySet对象:

  

 

 

  message = Message.objects.filter(pk=message_id2)

   message[0].content

  这样子确实可以读取到QuerySet中的数据,可是对QuerySet修改后的数据无法保存到数据库。

  例1中不要尝试通过message.save()的方式去同步数据到数据库,因为QuerySet不存在save()方法。

 

       正确写法如下: 

    要想同步到数据库中,需使用对象进行数据同步操作。

例2:

       message = Message.objects.filter(pk=message_id2).first()

           
            message.id = message_id2
            message.content = content2
            message.message_type = message_type2
            message.save()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DjangoQuerySet和Object是两个不同的概念。 1. QuerySet QuerySetDjango的一个概念,它表示数据库操作的结果集合。QuerySet可以像列表一样进行迭代、切片等操作,但是它并不是真正的列表。当你执行一个查询操作Django会返回一个QuerySet对象,这个对象包含了一些查询结果的方法。这些方法可以用来进行进一步的过滤、排序、切片等操作QuerySet是惰性的,这意味着它只有在需要的候才会执行查询,这有助于提高性能。 例如,以下代码创建了一个QuerySet对象,它包含了所有年龄大于18岁的用户: ``` from django.contrib.auth.models import User users = User.objects.filter(age__gt=18) ``` 2. Object Object指的是Django模型的一个实例。一个模型是一个数据库表的抽象,它定义了表的结构和字段,每个实例则代表了表的一行数据。你可以使用ORM API来创建、更新、删除和查询模型实例。 例如,以下代码创建了一个User模型的实例: ``` from django.contrib.auth.models import User user = User.objects.create(username='john') user.first_name = 'John' user.last_name = 'Doe' user.save() ``` 在这个例子,我们首先创建了一个User实例,然后通过修改它的属性来更新它,最后使用save()方法将更改保存到数据库。 总结 QuerySet和Object是Django的两个不同的概念,它们分别代表了数据库操作的结果集合和模型的一个实例。QuerySet是一个惰性的对象,它包含了一些查询结果的方法,可以用来进行进一步的过滤、排序、切片等操作。Object则代表了一个模型实例,你可以使用ORM API来创建、更新、删除和查询它。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值