模型层

准备阶段

django自带的sqlite3数据库,功能很少,并且针对日期类型不精确

准备步骤

  1. 数据库正向迁移命令(将类操作映射到表中)
    python3 manage.py makemigrations
    python3 manage.py migrate
  2. 数据库反向迁移命令(将表映射成类)
    python3 manage.py inspectdb

需求

我们只想操作orm,不想使用网络请求,需要有专门的测试环境

方式

自己搭建

import os

if __name__ == "__main__":
                os.environ.setdefault("DJANGO_SETTINGS_MODULE","day54.settings")

import django
django.setup()

"""进行代码操作"""

pycharm提供

python console

orm操作常见关键字

all()方法

查询数据

models.User.objects.all() # 列表套对象

models.User.objects.all().values('name') # 列表套字典
== models.User.objects.values('name') # 查找指定字段可以不写all()

models.User.objects.all().values_list('name', 'age') # 列表套元祖

filter()方法

filter()括号内支持填写多个筛选条件,默认是and关系

查询数据

通过主键筛选数据,可以直接写pk,会自动定位到当前表的主键字段,无需查看

models.User.objects.filter(pk=1)[0] # 索引不存在报错
models.User.objects.filter(pk=1).first # 索引不存在返回None
models.User.objects.filter().values('name','age')
models.User.objects.filter().last() # 获取最后一个对象

distinct对于数据对象必须是一模一样,主键值存在则无法去重

关键字方法

models.User.objects.order_by('age') # 升序
models.User.objects.order_by('-age') # 降序
order_by支持多个字段

models.User.objects.exclude(name='zhou') # 取反操作
models.User.objects.count() # 统计结果集的个数
models.User.objects.exist() # 校验是否存在,返回布尔值
models.User.objects.get(pk=100) # 获取数据,条件不存在直接报错

补充知识

models.DateField():年月日

auto_now:每次修改数据的时候都会自动更新当前时间

auto_now_add:在数据被创建出来的时候会自动记录当前时间