python之路_django ORM相关补充
一、非django项目文件执行ORM
在不启动django项目的情况下,我们是否可以进行ORM操作呢?当然不行。因为所有的ORM操作都必须是要连接数据库的。但是我们有这样的一个需求:想在一个文件中执行ORM。该如何实现呢?参考如下实例:
import os import sys import django sys.path.append(r'C:\Users\Administrator\PycharmProjects\s6day109') #将当前djang项目路径添加到环境 os.chdir(r'C:\Users\Administrator\PycharmProjects\s6day109') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "s6day109.settings") django.setup() #启动django from crm import models v = models.Customer.objects.all() print(v)
二、django中ORM的Q介绍
Q方法主要为了解决复杂条件查询的情况。
方式一:
Q(nid__gt=10) #nid>10 Q(nid=8) | Q(nid__gt=10) #nid=8或者nid>10 Q(nid=8) | Q(nid__gt=10) &Q(caption="root") #nid=8或者nid>10且caption="root" # 应用示例:(非Q条件放在Q条件后面,为且的关系。如status=2) customer_list = models.Customer.objects.filter(Q(recv_date__lt=)|Q(last_consult_date__lt=no_follow),status=2)
方式二:
q1=Q() q1.connector = "OR" q1.children.append(('id',1)) q1.children.append(('id__gt',3)) #q1中要求id=1或者id>3,例:models.UserInfo.objects.filter(q1) q2=Q() q2.connector = "OR" q2.children.append(('title__contain',"高")) q2.children.append(('nid',2)) #q2中要求title字段包含“高”或者nid=2,例:models.UserInfo.objects.filter(q2) con=Q() con.add(q1,"AND") con.add(q2,"AND") #con要求q1和q2的结果为且的关系,例:models.UserInfo.objects.filter(con)