django的ORM
Posted ting-light
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django的ORM相关的知识,希望对你有一定的参考价值。
在项目根目录下运行 python manage.py shell 即可进入django的交互shell界面
查询
from my_app.models import MyTestModel
datas=MyTestModel.objects.filter(name=‘my_name‘)
filter()用于筛选满足条件的子集
exclude()用于筛选不满足条件的子集
filter用于筛选多条结果,返回tuple(query set). 可以在结果上继续应用filter
datas=datas.filter(time=‘2018-12-21‘)
大于gt ,大于等于gte ,小于lt , 小于等于lte,中间用双下画下线连接
datas=datas.filter(time__gt=‘2018-12-21‘).order_by(‘name‘,‘time‘)
order_by排序可以是单个字段或多个字段
limit用python的切片表示,切片是左开右闭,数字表示索引,下标从0开始,不支持负数索引 如:[-1]
datas=datas[2:5] 相当于limit(2,3) sql的limit第一个参数是索引,下标从1开始,不包含该索引的记录,第二个参数是记录数,表示的
含义为,从第二条数据后开始截取3条数据。
like
datas=datas.filter(name__contains="key") 相当于 like ‘%key%‘
django的orm的query也是惰性的,在多次执行filter ,等操作时,它实际上并未进行任何数据库活动,直到返回的数据被用到时才会进行查询。
>>> q = Entry.objects.filter(headline__startswith="What")
>>> q = q.filter(pub_date__lte=datetime.date.today())
>>> q = q.exclude(body_text__icontains="food")
>>> print(q)
这个只会在最后print(q)时执行一次查询操作。
每次执行的返回的queryset都是相互独立的,不受下次filter影响.
>>> q1 = Entry.objects.filter(headline__startswith="What") >>> q2 = q1.exclude(pub_date__gte=datetime.date.today()) >>> q3 = q1.filter(pub_date__gte=datetime.date.today())
q3是在q1的基础上对pu_date字段经行了过滤
filter获得的结果,即使只有一条记录也会返回一个tuple。 如果已知要获取的结果,有且仅有一条,可以使用get()
datas=datas.get(pk=1)
但是如果没有匹配的结果就会raise 一个DoesNotExist的异常,如果结果多于1条就会raise一个 MultipleObjectsReturned的异常。
创建
from blog.models import Author
joe=Author.objects.create(name="Joe")
joe.save()
对于用户密码的创建要使用create_user()
from django.contrib.auth.models import User
amli=User.objects.create_user(username="Amili",password="someword")
amli.save()
以上是关于django的ORM的主要内容,如果未能解决你的问题,请参考以下文章