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()