模型层之前期准备
1.自带的sqlite3数据库对时间字段不敏感,有上海会展示错乱,所以我们习惯切换成常见的数据库入MySQL
django orm并不会自动帮你创建库,所以需要提前准备好
2.单独测试django某个功能层
默认不循序单独测试某个py文件 如果想要测试某个py文件(主要是models.py)
测试环境1:pycharm提供的python console 但是他不会保存数据,不太推荐
测试环境2:自己搭建(自带的tests或者自己创建)
1.拷贝manage.py前4行
2.自己在加两行内容如下:
import django
django.setup()
1.django orm底层还是SQL语句,我们是可以查看的
如果我们手上是一个QuerySet对象,那么可以直接点query查看SQL语句
如果想查看所有orm底层的SQL语句也可以在配置文件添加日志记录
代码如下:
import os
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject2.settings')
import django
django.setup()
from app01 import models 导入模块一定要在下面,要不会报错
ORM常用关键字
1.create()创建数据并直接获取当前创建的数据对象
res = models.Userinfo.objects.create(name='jason',age='18',gender='男性',heigth='168')
print(res) # 对象:jason
2.filter() 根据条件筛选数据 结果是QuerySet对象[对象1,对象2,对象3]
res = models.Userinfo.objects.filter()
res1 = models.Userinfo.objects.filter(name='jason')
print(res)
print(res1)
3.first()与last():QuerySet支持索引取值,但是只支持正数,索引不存在的数据值会报错
res0 = models.Userinfo.objects.filter()
res = models.Userinfo.objects.filter().first()
res1 = models.Userinfo.objects.filter().last()
print(res0) # <QuerySet [<Userinfo: 对象:jason>, <Userinfo: 对象:李治>, <Userinfo: 对象:闫龙龙>, <Userinfo: 对象:郑凯泽>, <Userinfo: 对象:李晓建>]>
print(res) # 对象:jason
print(res1) # 对象:李晓建
4.update():更新数据(批量更新或者指定更新)
res = models.Userinfo.objects.update(heigth=161)
res1 = models.Userinfo.objects.filter(name='jason').update(age=20)
print(res) # 5
print(res1) # 1
5.delete():删除数据(批量删除或者指定删除)
models.Userinfo.objects.filter().delete() # 删除全部数据
models.Userinfo.objects.filter(id=1).delete() # 删除指定id的数据
ps:删库需小心,尽量不要删
6.all():查询所有数据,结果是QuerySet对象
res = models.Userinfo.objects.all()
print(res) # <QuerySet [<Userinfo: 对象:jason>, <Userinfo: 对象:李治>, <Userinfo: 对象:闫龙龙>, <Userinfo: 对象:郑凯泽>, <Userinfo: 对象:李晓建>]>
7.values():根据指定字段获取数据值,结果是QuerySet [{},{},{},{}]
res = models.Userinfo.objects.values()
res1 = models.Userinfo.objects.all().values()
res2 = models.Userinfo.objects.filter(id=8).values()
print(res)
print(res1)
print(res2)
8.values_list():根据指定字段获取数据,结果是QuerySet [(),(),()]
res = models.Userinfo.objects.all().values_list()
print(res)
9.distinct():去重,数据要一定一模一样才可以,如果有主键参与肯定是不可以的
res = models.Userinfo.objects.values('name').distinct()
print(res)
10.order_by():根据指定条件排序,默认是升序,字段前面加负号是降序
res = models.Userinfo.objects.all().order_by('age') # 升序
print(res)
res1 = models.Userinfo.objects.all().order_by('-age') # 降序
print(res1)
11.get():根据条件筛选数据并直接获取到数据对象,一旦条件不存在会直接报错,不建议使用
res = models.User.objects.get(pk=1)
print(res)
12.exclude():取反操作
res = models.User.objects.exclude(pk=1)
13.reverse() 颠倒顺序(被操作的对象必须是已经排过序的才可以)
res = models.User.objects.all()
res = models.User.objects.all().order_by('age')
res1 = models.User.objects.all().order_by('age').reverse()
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)
如果你想知道你对数据库进行操作时,Django内部到底是怎么执行它的sql语句时可以加下面的配置来查看
在Django项目的settings.py文件中,在最后复制粘贴如下代码:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
标签:models,res,djando,res1,objects,Userinfo,print,模型
From: https://www.cnblogs.com/zhanghong1229/p/16983424.html