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的主要内容,如果未能解决你的问题,请参考以下文章

Django orm的使用

Django之ORM操作

Django---ORM操作大全

Django models ORM基础操作--白话聊Django系列

Django之ORM

Django-ORM操作数据库无数据问题