Django读取数据

Django orm概念

通常,在Django中
*定义一张数据库的表 就是定义一个继承自 django.db.models.Model 的类
定义该表中的字段(列), 就是定义该类里面的一些属性
类的方法就是对该表中数据的处理方法,包括 数据的增删改查
这样,开发者对数据库的访问,从原来的使用底层的 sql 语句,变成 面向对象的开发,通过一系列对象的类定义 和方法调用就可以 操作数据库。
这样做:

  • 首先 极大的简化了我们应用中的数据库开发,因为无需使用sql语句操作数据库了, 提高了开发的效率;
  • 其次 屏蔽了 不同的数据库访问的底层细节,基本做到了 开发好代码后,如果要换数据库,几乎不需要改代码, 修改几个配置项就可以了。
  • 这种 通过 对象 操作数据库 的方法 被称之为 ORM (object relational mapping)

实现读取数据库数据

实现一个函数,来处理浏览器发出的URL的访问请求 我们需要返回 数据库中 customer 表 所有记录。Django 中 对数据库表的操作, 应该都通过 Model对象 实现对数据的读写,而不是通过SQL语句。
比如,这里我们要获取 customer 表 所有记录, 该表是和我们前面定义的 Customer 类管理的

首先导入Customer

# 导入 Customer 对象定义
from  common.models import  Customer

然后操作数据库

得到Customer表中的所有记录,以列表的形式返回给qs

qs = Customer.objects.values()

第一个for循环将遍历表中每一条记录,将结果返回给customer,返回结果为一个字典。第二个for循环遍历一条记录中的每一个字段,将结果拼接成字符串的形式

for customer in  qs:
    for name,value in customer.items():
        retStr += f'{name} : {value} | '

整体代码

def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录
# 每条表记录都是是一个dict对象,
# key 是字段名,value 是 字段值
qs = Customer.objects.values()

# 定义返回字符串
retStr = ''
for customer in  qs:
    for name,value in customer.items():
        retStr += f'{name} : {value} | '

    # <br> 表示换行
    retStr += '<br>'

return HttpResponse(retStr)

添加过滤条件

有的时候,我们需要根据过滤条件查询部分客户信息。
比如,当用户在浏览器输入 /sales/customers/?phonenumber=13000000001 ,要求返回电话号码为 13000000001 客户记录。
我们可以通过 filter 方法加入过滤条件,修改view里面的代码,

整体代码

def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录
qs = Customer.objects.values()

# 检查url中是否有参数phonenumber
ph =  request.GET.get('phonenumber',None)

# 如果有,添加过滤条件
if ph:
    qs = qs.filter(phonenumber=ph)

# 定义返回字符串
retStr = ''
for customer in  qs:
    for name,value in customer.items():
        retStr += f'{name} : {value} | '
    # <br> 表示换行
    retStr += '<br>'

return HttpResponse(retStr)

详解

  • Django 框架在 url 路由匹配到函数后, 调用函数时,会传入 一个 HttpRequest 对象给参数变量 request,该对象里面 包含了请求的数据信息。
  • HTTP 的 Get 请求url里面的参数 可以通过 HttpRequest对象的 GET 属性获取。这是一个类似dict的对象。
  • 然后通过调用 QuerySet 对象的filter方法,就可以把查询过滤条件加上去
posted @ 2021-09-16 19:49  时倾!  阅读(832)  评论(0编辑  收藏  举报