模型层使用准备
# 1.django自带的sqllite3对时间字段不敏感,所以使用mysql会更常见
# 2.单独测试django某个功能层
"""django默认是不可以单独测试py文件的"""
想测试某个py文件(主要是models.py):
-1.测试环境1: pycharm提供的python console
-2.测试环境2: 使用自带的tests或自己创建
步骤1:拷贝manage.py前四行
步骤2:自己加两行,并调用函数
import django
django.setup()
"""
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoday05.settings')
import django
django.setup()
main()
"""
# 3.查看django的orm底层sql语句
-1. 我们手上是一个QuerySet对象,那么可以直接点query查看SQL语句。
-2. 查看所有orm底层的SQL语句也可以在配置文件添加日志记录
ORM关键字
# ORM查询关键字
1. create() # 创建数据并直接获取当前创建的数据对象
"""
res = models.User.objects.create(name='tom',age=24)
res = models.User.objects.create(name='liyuu',age=24)
"""
2. filter() # 根据条件筛选数据,结果是QuertySet [数据对象1,数据对象2]
"""
res = models.User.objects.filter(name='hanser',age=29)
"""
3.first()/last() # QuerySet支持索引取值但是只支持正数,不推荐使用索引取值
"""
res = models.User.objects.filter(pk=100)[0] # 数据不存在索引值直接报错
res = models.User.objects.filter(pk=100).first() # 数据不存在不报错而是返回none
res = models.User.objects.filter(pk=100).last()
res = models.User.objects.filter(pk=1).first() # 数据存在返回一个对象
res = models.User.objects.filter(pk=1).last()
"""
4.update # 更新数据
"""
res = models.User.objects.filter(id=1).update()
"""
5.delete # 删除数据
"""
res = models.User.objects.filter().delete()
"""
6.all # 查询所有数据
"""
res = models.User.objects.all()
"""
7.values() # 根据指定字段获取数据,结果是QuerySet [{},{},{},{}]
"""
res = models.User.objects.all().values('name')
res = models.User.objects.filter().values()
res = models.User.objects.values()
"""
8.values_list() # 根据指定字段获取数据 结果是QuerySet [(),(),(),()]
"""
res = models.User.objects.all().values_list('name','age')
"""
9.distinct() # 去重,主键不一样也不行
"""
res = models.User.objects.values('name','age').distinct()
"""
10.order_by() # 根据指定条件排序,默认是升序,字段前面加负号就是降序
"""
res = models.User.objects.all().order_by('age')
print(res)
"""
11.get() # 根据条件筛选数据并直接获取到数据对象,一旦条件不存在会直接报错
"""
res = models.User.objects.get(pk=1)
print(res)
res = models.User.objects.get(pk=100, name='jason')
print(res)
"""
12.exclude() # 取反操作
"""
res = models.User.objects.exclude(pk=1)
print(res)
"""
13.reverse() # 颠倒顺序(被操作的对象必须是已经排过序)
"""
res = models.User.objects.all()
res = models.User.objects.all().order_by('age')
res1 = models.User.objects.all().order_by('age').reverse()
print(res, res1)
"""
14.count() # 统计结果集中数据的个数
"""
res = models.User.objects.all().count()
print(res)
"""
15.exists() # 判断结果集中是否含有数据,如果有则返回True 没有则返回False
"""
res = models.User.objects.all().exists()
print(res)
res1 = models.User.objects.filter(pk=100).exists()
print(res1)
"""