1.创建表和字段
from django.db import models class Blog_Model(models.Model): name = models.CharField(db_column='name', max_length=200, blank=True, verbose_name='name')
num = models.IntegerField(db_column='num', blank=True, verbose_name='num')
class Meta: db_table = 'Blog' # db_table--重写数据表名称
- 注:在类里面不指定主键字段,django会帮您自动创建一个id主键!
- 默认情况下,Django 会根据模型类的名称和包含它的应用的名称自动指定数据库表名称。eg:blog_type(blog:APP名称,type:模型类名称)
- 使用 Meta类中的 db_table 参数来重写数据表的名称
增删改查
from main_test.db_manager.models import Blog_Model
Blog_Model.objects.all().values()
Blog_Model.objects.all().values('id')
Blog_Model.objects.all().values_list('name','num')
Blog_Model.objects.get(id=1).num
Blog_Model.objects.filter(id__lt=3).values() # less then
Blog_Model.objects.filter(id__gt=3).values() # greater then
Blog_Model.objects.filter(id__gt=3,id__lt=6).values()
Blog_Model.objects.filter(id__in=[3,4,5]).values()
Blog_Model.objects.exclude(id__in=[3,4,5]).values()
Blog_Model.objects.filter(id__range=[1, 5]).values() # 范围 bettwen and
Blog_Model.objects.filter(name='yy').order_by('id').values()
Blog_Model.objects.filter(name='yy').order_by('-id').values()
Blog_Model.objects.all()[5:8].values()
查询相关API:
filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 条件选取querySet的时候,filter表示=。 field名称exact # 精确等于 like 'aaa' iexact # 精确等于 忽略大小写 ilike 'aaa' contains # 包含 like '%aaa%' icontains # 包含 忽略大小写 ilike '%aaa%' gt # 大于 gte # 大于等于 lt # 小于 lte # 小于等于 in # 存在于一个list范围内 startswith # 以...开头 istartswith # 以...开头 忽略大小写 endswith # 以...结尾 iendswith # 以...结尾,忽略大小写 range # 在...范围内 ctimerange=(datetime.date(2022,5,1),datetime.date(2022,5,16)) year # 日期字段的年份 month # 日期字段的月份 day # 日期字段的日 __isnull=True/False
all(): 查询所有结果
get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------
values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
order_by(*field): 对查询结果排序
reverse(): 对查询结果反向排序
distinct(): 从返回结果中剔除重复纪录
values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列,添加参数flat = True,以列表形式显示结果。
count(): 返回数据库中匹配查询(QuerySet)的对象数量。
first(): 返回第一条记录
last(): 返回最后一条记录
exists(): 如果QuerySet包含数据,就返回True,否则返回False。
Blog_Model.objects.create(name='qq', num=4)
Blog_Model(name='qq', num=3).save()
Blog_Model.objects.get_or_create(id=1, name='ww', num=1)
get_or_create顾名思义,查询或者创建一条数据,首先是执行的时候首先会去查询有没有这个值,如果有就返回,没有就创建。 get_or_create会返回一个tuple,第一个值是查到或者创建的数据,第二个值是一个布尔,表示是否执行了创建操作。 在进行查询的时候和使用get查询类似,当查到超过一条数据的时候会触发MultipleObjectsReturned。 创建的时候也和使用create创建类似。 如果你正在使用MySQL,请确保使用READ COMMITTED 隔离级别而不是默认的REPEATABLE READ,否则你将会遇到get_or_create 引发IntegrityError 但对象在接下来的get() 调用中并不存在的情况。
Blog_Model.objects.filter(id=1).delete()
Blog_Model.objects.filter(id=4).update(name='yy')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)