django ORM查询方法

all() 结果为queryset类型

models.Book.objects.all()
<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>
filter() 条件查询(它下面也有很多种方法,见最下面)

ret = models.Book.objects.filter(id=5)
ret
<QuerySet [<Book: Book object>]>
get() 得到的是一个model对象,有且只能有一个
会出现两种报错

1 查不到数据会报错 :Book matching query does not exist.
2 返回值超过一个就报错 :returned more than one Book – it returned 13!

ret = models.Book.objects.get(id=5)
ret
<Book: Book object>
exclude() 排除

object能够调用,models.Book.objects.exclude(book_name__startswith=‘活’)
queryset类型数据能够调用。

ret = models.Book.objects.all()
ret.exclude(id=5)
<QuerySet [<Book: Book object>, <Book: Book object>]>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 3.1及以上版本中,ORM支持异步查询,你可以使用异步视图和异步ORM查询来获得更好的性能。下面是一个具体的例子,展示如何将Django ORM查询方法转换为异步方法。 假设我们有一个模型类`Person`,它有两个字段`name`和`age`: ```python from django.db import models class Person(models.Model): name = models.CharField(max_length=50) age = models.IntegerField() ``` 我们想查询所有年龄大于20岁的人的姓名和年龄,并按年龄排序。在同步视图中,我们可以这样写: ```python from django.shortcuts import render from .models import Person def persons(request): persons = Person.objects.filter(age__gt=20).order_by('age') return render(request, 'persons.html', {'persons': persons}) ``` 要将此查询方法转换为异步方法,我们需要将其标记为异步函数,并使用异步查询方法`await`获取结果。我们还需要将Django的默认同步数据库连接改为异步连接,这可以通过在设置中配置异步引擎来完成。下面是一个示例: ```python # mysite/asgi.py import os from django.core.asgi import get_asgi_application from channels.layers import get_channel_layer from django.conf.urls import url from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack from django.urls import path from . import consumers os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') application = ProtocolTypeRouter({ "http": get_asgi_application(), "websocket": AuthMiddlewareStack( URLRouter([ path("ws/chat/<str:room_name>/", consumers.ChatRoomConsumer.as_asgi()), ]) ), }) ``` ```python # mysite/settings.py ... ASGI_APPLICATION = 'mysite.asgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '5432', } } DATABASES['default']['ATOMIC_REQUESTS'] = True # Use async engine for Django ORM DATABASES['default']['ENGINE'] = 'django.db.backends.asyncpg' ``` 现在我们来重写视图函数: ```python from django.shortcuts import render from .models import Person async def persons(request): persons = await Person.objects.filter(age__gt=20).order_by('age').all() return render(request, 'persons.html', {'persons': persons}) ``` 注意,这里我们使用了`await`关键字来等待异步查询的结果。同时,我们将原来的同步函数改为了异步函数。 最后,我们需要在路由中使用异步视图: ```python from django.urls import path from .views import persons urlpatterns = [ path('persons/', persons), ] ``` 至此,我们已经成功将Django ORM查询方法转换为异步方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值