我们运用django框架时,会用到get\filter查询,这两者有什么区别呢?
看如下代码
# try: user1 = User.objects.get(name="zhangsan1") user2 = User.objects.filter(name="zhangsan") print(type(user1)) print(type(user2)) import json # print(json.dumps(user1, default=lambda obj:obj.__dict__)) # except DoesNotExist as e: # pass
数据库中存在zhangsan用户,不存在zhangsan1,当使用get查询到的数据不存在时,则会报异常(models.DoesNotExist: User matching query does not exist.)
如下:
# try: user1 = User.objects.get(name="zhangsan") user2 = User.objects.filter(name="zhangsan") user3 = User.objects.filter(name="zhangsan1") print(type(user1)) print(type(user2)) print(user3) print([type(p) for p in user2]) import json # print(json.dumps(user1, default=lambda obj:obj.__dict__)) # except DoesNotExist as e: # pass
当运用filter查询返回的是一个集合,当查询的数据不存在时会返回空集合,不会报异常
运行结果
<class 'myapp.models.User'>
<class 'django.db.models.query.QuerySet'>
<QuerySet []>
[<class 'myapp.models.User'>]
即大家在运用get和filter时需要注意:如果运用get,则需要处理异常,如果运用filter,则需要从集合中获取所需要的数据