Django ORM操作数据库
ORM
在Django MVT 设计模式中的Model,专门负责和数据库进行交互,对应的文件models.py。Model中内嵌了ORM框架,使得我们不需要面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查。
ORM框架就是把数据库中的表与模型类相对应,把数据库表中的行与相应模型类中的对象相对应,把数据库中表的字段与模型类的属性相对应。
一、数据查询
1、查询集, 也成查询结果集(QuerySet),表示从数据库中获取对象的集合,查询集不是简单的列表。
1) all(): 查询模型对应数据表中的所有数据。 返回QuerySet对象是一个由数据表中所有数据记录组成的列表。
from lc.models import BookInfo # 导入模型 books = BookInfo.objects.all()
2) filter(): 查询符合条件的N个结果,返回结果为一个QuerySet对象,该对象是一个由数据记录组成的列表。
filter(id__exact=20) # filter(字段名__运算符=值)
3) get(): 查询数据表中满足条件的数据。 get()方法只能用于查询返回符合要求只有一条数据的情况,当查询结果中没有记录或记录超过一条时会报错抛出异常。
book = BookInfo.objects.get(id=8)
4) exclude(): 排除掉符合条件之后剩下的数据组成的结果集,该结果集是一个QuerySet对象,该对象是一个由数据记录组成的列表,相当于条件语句中not。
# 查询编号大于3的图书 books = BookInfo.objects.exclude(id__gt=3)
5) values(): 获取想要的字段。该方法返回的为一个QuerySet对象,该对象包含的数据类型为有指定字段和值形成的字典。最终返回值为由字典组成的列表。
# 查询出所有数据记录后筛选出数据记录的id、name、read_count字段 books = BookInfo.objects.all().values('id', 'name', 'read_count')
6) distinct(): 对查询出来的数据记录进行去重。
data = BookInfo.objects.all().values('is_delete').distinct()
2、运算符
1) 相等: exact
# exact相当于 等于号 book = BookInfo.objects.get(id__exact=1) #简写形式 book = BookInfo.objects.get(id=1)
2) 包含及以指定值开头或结尾: contains、startswith、endswith
books = BookInfo.objects.filter(name__contains='湖') books = BookInfo.objects.filter(name__startswith='张') books = BookInfo.objects.filter(name__endswith='三')
3) 比较查询: gt大于、gte大于等于、lt小于、lte小于等于
# 查询编号大于3的图书 books = BookInfo.objects.filter(id__gt=3)
4) 空查询: isnull
# 查询书名为空的图书 books = BookInfo.objects.filter(name__isnull=True)
5) 范围查询: in 是否在范围内
# 查询编号未1或3或5的图书 books = BookInfo.objects.filter(id__in=[1,3,5])
待补充...
【参考资料】http://www.jnnr.cn/a/138159.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?