django ORM

django ORM 单独使用

import os
import sys
import django

pathname = os.path.dirname(os.path.abspath(__file__))
sys.path.append(pathname)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MxShop.settings")

django.setup()

from apps.users.models import UserProfile


if __name__ == "__main__":

    user = UserProfile.objects.all()
    for i in user:
        print(i.name,i.gender,i.email)

关键点在于需要将项目的根目录设置为模块目录。

QuerySet API

Person.objects.all() # 查询所有
Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存,不支持负索引,后面有相应解决办法,第7条
Person.objects.get(name="abc") # 名称为 abc 的一条,多条会报错
 
get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter
Person.objects.filter(name="abc") # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
 
Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人
Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写
 
Person.objects.filter(name__regex="^abc") # 正则表达式查询
Person.objects.filter(name__iregex="^abc")# 正则表达式不区分大小写
 
# filter是找出满足条件的,当然也有排除符合某条件的
Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象
Person.objects.filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的

  

Person.objects.count() # 查询数量 select count(*)
Person.objects.all().distinct(*field_names) # 根据字段去重
Person.objects.all().exists() # 检查是否有对象,boolean

原生sql

from django.db import connection
 
cursor = connection.cursor()
nums = cursor.execute(sql)
cursor.fetchone()
cursor.fetchall()

  

原文地址:https://www.cnblogs.com/zenan/p/8979284.html