django执行数据库查询之后返回的结果集如何转json

本文介绍在Django中如何正确处理SQL查询结果并将其转换为JSON格式返回给前端,重点讲解使用model_to_dict方法的注意事项及遍历结果集进行字典转换的方法。

django执行sql语句后得到的返回结果是一个结果集,直接把结果转json返回给前端会报错,需要先遍历转字典在转json,特别注意model_to_dict()只会将结果集的第一条数据转字典,如果你是根据指定条件查一条数据返回的,直接用model_to_dict()没问题,如果执行的是all()或filter()到多条或全部的数据,这个时候去model_to_dict()这个集合就不行了,那么先遍历这个集合在转字典,然后转json就ok了

dic = {}
res = models.tables.objects.all().order_by('-id')
L = []
b = model_to_dict(res)
L.append(b)
dic['code'] = '1'
dic['message'] = ''
dic['result'] = L
return HttpResponse(json.dumps(dic, ensure_ascii=False))

order_by('-id'):是将结果集根据ID倒序排序

Django数据库查询数据的接口流程如下: ### 1. 模型定义 在Django中,每个模型都是继承了`django.db.models.Model`类的Python类,对应数据库中的一个表格。开发人员会在`models.py`文件中定义模型,将数据库的字段、关系、行为定义为模型类的属性或方法,以使用丰富且灵活的数据库访问API [^2]。 示例代码如下: ```python # models.py from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) publication_date = models.DateField() ``` ### 2. 视图函数或视图类编写 视图负责处理用户的请求并返回响应。在视图中,会使用模型提供的查询方法从数据库中获取数据。视图可以是函数视图或基于类的视图。 #### 函数视图示例: ```python # views.py from django.http import JsonResponse from .models import Book def get_books(request): books = Book.objects.all() data = [{'title': book.title, 'author': book.author, 'publication_date': str(book.publication_date)} for book in books] return JsonResponse(data, safe=False) ``` #### 基于类的视图示例: ```python # views.py from django.http import JsonResponse from django.views import View from .models import Book class BookListView(View): def get(self, request): books = Book.objects.all() data = [{'title': book.title, 'author': book.author, 'publication_date': str(book.publication_date)} for book in books] return JsonResponse(data, safe=False) ``` ### 3. URL配置 将视图与URL进行绑定,当用户访问特定的URL时,Django会调用相应的视图函数或视图类来处理请求。 ```python # urls.py from django.urls import path from .views import get_books, BookListView urlpatterns = [ path('books/', get_books, name='get_books'), path('books-class/', BookListView.as_view(), name='book_list_view'), ] ``` ### 4. 数据库查询执行 当用户访问配置好的URL时,Django执行视图中的查询代码。例如,`Book.objects.all()`会查询`Book`模型对应的数据库表中的所有记录。Django查询API提供了丰富的查询方法,如`filter()`、`exclude()`、`order_by()`等,可以根据不同的条件进行查询。 ### 5. 数据序列化与响应返回 查询到的数据通常是模型实例的列表,需要将其换为JSON或其他格式的数据,以便在HTTP响应中返回给客户端。在上述示例中,使用列表推导式将模型实例换为字典列表,然后使用`JsonResponse`将其作为JSON数据返回。 ### 6. 客户端接收数据 客户端(如浏览器或其他应用程序)发送请求到配置好的URL,接收到Django返回JSON数据后,可以进行进一步的处理和展示。 综上所述,Django数据库查询数据的接口流程包括模型定义、视图编写、URL配置、数据库查询执行、数据序列化与响应返回以及客户端接收数据等步骤。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值