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方法,就可以把查询过滤条件加上去