Code前端首页关于Code前端联系我们

Django开发:常用数据库操作总结

terry 2年前 (2023-09-24) 阅读数 54 #后端开发

查询类操作

1)查询所有结果,相当于 select * z
list = Test.objects.all()

fromdjango.db import connection

cursor = connection.cursor()

cursor.execute(“select * from Test where name = %s”, "yyp")

row = cursor.fetchone()

v sq Conditional query ,其中filter与SQL中相关,用于过滤查询结果
传递多个参数: result = Test.objects.filter(id=1, name='test')
如果有多个条件和查询,直接用逗号分隔。过滤函数中的参数是测试模型中的所有字段

3)获取单个对象,get方法的参数一般是模型的主键。如果找不到则报错
test_obj = Test.objects.get(id=1)

4) 限制返回的结果数据量,相当于sql中使用order_by的限制排序。如果按字段a倒序排序,就是order_by("-time")
Test.objects.order_by('name')[0:2]

5) 链式查询
Test.objects.filter(name='test').order_by(“-ctime”)

6) 多条件参数查询,传递字典,构建查询条件
data =测试。 objects.filter(**query_dict).order_by(“- ctime”).values
其中query_dict是字典,key是条件字段,value是条件值
query_dict = {'id ':123, 'name':'yyp'}

7) 传递对象Q并创建查询条件

  • 在filter()等函数中,关键字参数具有关系“a”。但是,如果要执行更复杂的查询(例如实现过滤条件的关系),可以使用 Q 对象。
  • Q ​​对象包括 AND 关系和 OR 关系
  • Q ​​对象可以使用& 和 |运营商。当一个操作连接两个 Q 对象时,会生成一个新的等效 Q 对象

1。第一步是构造对象 Q:
fromdjango.db.models import Q
Q(name__startswith='h') | Q(name__startswith='p')

2.第二步,使用Q对象作为查询参数。多个 Q 对象的关系为 a:
Test.objects.filter(
Q(date='2018-10-10 00:00:00),❙❙❙ Q(name__startswith='h') | Q(name__startswith ='p')

filter() 等函数可以接受 Q 对象和条件参数,但 Q 对象必须放在条件参数之前

8 ) 过滤不满足条件的操作
data = Test .objects.exclude(id=1)

传入条件查询
q1 = Q()
q1.connector = 'OR'              #连接方式
q1.children.append(('id', 1))
q1.children.append(('id', 2))
q1.children.append(('id', 3))

models.Tb1.objects.filter(q1)
合并条件查询合并条件查询♶ 1 ) 添加新记录
test1 = Test(name='yyp')
test1.save()

首先更新类操作♶)❝,然后修改对象,然后保存

test1 = Test.objects. get (ID = 1)


Test1.name = 'Google'
Test1.save ()

2) 条件更新字符串 1object. (name='Google')


删除操作

1) 首先要求获取要删除的对象,然后直接删除操作
// 删除id=1的数据 ? .delete()

与QuerySet相关

Django中模型查询的结构类型是QuerySet,它基本上是一组查询对象。

1) 将多个查询结果转换为字典列表
// all()方法查询一组查询,并使用values方法将其转换为字典集合
= Test .objects.all( ).values( )
data_dict_list = list(data)
---“{101}IDQuery :XXX , “name ”:XXX}]>

2) QuerySet 对象转换为字典对象
fromdjango.forms.models import model_to_dict
object ❙
id=1 )
data_dict = model_to_dict(data)

3) 序列化为 json 数据

对于很多 Web 应用开发接口来说,json 数据文件是从 DB 返回的,哪些查询可以考虑 django-rest 的序列化器类-framework库,参见:教程一:序列化


查询条件汇总

字段名__op:
__exact 精确等于 like ‘aaa’

__iexact精确等于忽略大小写ilike‘aaa’

__contains 包含 like ‘%aaa%’

__icontains包含忽略大小写ilike‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。

__gt大于

__gte大于等于

__lt小于

__lte小于等于

__in 存在于一个list范围内

__startswith以…开头

__istartswith以…开头忽略大小写

__endswith以…结尾

__iendswith以…结尾,忽略大小写

__range 在…范围内

__year 日期字段的年份

__month 日期字段的月份

__day 日期字段的日

__isnull=True/False
使用SQL命令查询本文由腾讯蓝鲸智能云撰写,编辑发布

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门