模型层
django自带的sqlite3数据库,功能很少,并且针对日期类型不精确
准备步骤
- 数据库正向迁移命令(将类操作映射到表中)
python3 manage.py makemigrations python3 manage.py migrate
- 数据库反向迁移命令(将表映射成类)
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:在数据被创建出来的时候会自动记录当前时间