python之路_django ORM相关补充

一、非django项目文件执行ORM

  在不启动django项目的情况下,我们是否可以进行ORM操作呢?当然不行。因为所有的ORM操作都必须是要连接数据库的。但是我们有这样的一个需求:想在一个文件中执行ORM。该如何实现呢?参考如下实例:

import os
import sys
import django
sys.path.append(r'C:UsersAdministratorPycharmProjectss6day109')    #将当前djang项目路径添加到环境

os.chdir(r'C:UsersAdministratorPycharmProjectss6day109')
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)
原文地址:https://www.cnblogs.com/seven-007/p/8534598.html