基础操作
进阶滤波器操作
一、小得示例代码
def get_person(request):
# 查询不会,破坏元数据所以不需要使用try来判断是否成功
# get他会得到数据库中得一条数据
# p = person.objects.get(id=24) # person 对象
# p = person.objects.get(pk=24) # pk是主键得意思
# p = person.objects.get(age=23388) # 多对象被返回get() returned more than one person -- it returned 6!
# # get方法就是不能找不到 也不能找多个 person matching query does not exist.
# print(p, p.name)
# persons = person.objects.all()
# # print(persons, type(persons))
# # queryset 返回得就是一个查询集类型class 'django.db.models.query.QuerySet'
# # 可以遍历查询集
# for p in persons:
# print(p.name,p.age)
# pass
p = person.objects.first() # 查询集得第一条数据
p = person.objects.last() # 查询集得最后一条数据
print(p.name)
return HttpResponse('查询成功')
模型返回得类型可以再Model.py里面定义
class person(models.Model):
name = models.CharField(max_length=20, unique=True)
age = models.PositiveIntegerField(default=18)
class Meta:
# 定义表名
db_table = 'tb_person'
def __str__(self):
return f'{self.name} - {self.age}'
二、filter滤波也是可以套娃 p = person.objects.filter(age__gt=26).filter(id__lt=23)
print(p)
# for i in p:
# print(i.name,i.age,i.id)
三、也可以可以__in 元组形势 多选查询
p = person.objects.filter(age__in=[10,11])
print(p.values('name'))# 查询结果可以vales 过滤
其次还有排序 聚合等等这些功能 只是表达问题 可以借助ai可以跳着学
在Django的ORM(Object-Relational Mapping)中,有几种主要的方法来查询数据库。以下是一些常用的查询方法: filter():
filter() 是最常用的一种方法,它返回一个QuerySet,表示从数据库中检索的对象集合。你可以使用它来进行复杂的查询,包括使用逻辑运算符(and、or)和关系字段。 python复制代码
| # 获取id大于23的所有Person对象 |
| persons = Person.objects.filter(id__gt=23) |
| |
| # 获取名字是'John'的所有Person对象 |
| persons_named_john = Person.objects.filter(name='John') |
| |
| # 使用多个条件查询 |
| persons_over_30 = Person.objects.filter(age__gt=30, is_active=True) |
get():
get() 方法也返回一个对象,但是当你确定查询结果应该只包含一个对象时使用。如果查询结果有多个对象或没有对象,get() 会引发异常。 python复制代码
| # 获取id为42的Person对象 |
| person = Person.objects.get(id=42) |
exclude():
exclude() 方法与 filter() 相反,它返回不满足给定条件的对象集合。 python复制代码
| # 获取id不大于23的所有Person对象 |
| persons = Person.objects.exclude(id__lte=23) |
values() 和 values_list():
values() 方法返回一个QuerySet,它包含字典,每个字典表示一个对象,键是字段的名称,值是字段的值。values_list() 方法类似,但返回的是元组列表。 python复制代码
| # 获取所有Person对象的id和name字段 |
| persons_data = Person.objects.values('id', 'name') |
| |
| # 获取所有Person对象的id和name字段,作为元组列表 |
| persons_data_list = Person.objects.values_list('id', 'name') |
annotate() 和 aggregate():
annotate() 用于给QuerySet中的每个对象添加额外的计算字段,通常是用于执行聚合函数。aggregate() 则对整个QuerySet执行一个聚合函数,并返回一个包含单个值的字典。 python复制代码
| # 计算每个Person对象的总分数(假设有一个score字段) |
| persons_with_total_score = Person.objects.annotate(total_score=Sum('score')) |
| |
| # 计算所有Person对象的总分数 |
| total_score = Person.objects.aggregate(Sum('score')) |
order_by():
order_by() 方法用于对QuerySet中的对象进行排序。 python复制代码
| # 按年龄升序排序所有Person对象 |
| persons_ordered = Person.objects.order_by('age') |
| |
| # 按年龄降序排序所有Person对象 |
| persons_ordered_desc = Person.objects.order_by('-age') |
count():
count() 方法返回QuerySet中的对象数量。 python复制代码
| # 计算Person对象的总数 |
| total_persons = Person.objects.count() |
exists():
exists() 方法检查QuerySet中是否至少有一个对象。 python复制代码
| # 检查是否存在id为42的Person对象 |
| has_person = Person.objects.filter(id=42).exists() |
除了上述方法,Django还提供了其他更高级的查询方法,如 select_related() 和 prefetch_related(),用于优化关联对象的查询性能。这些方法通常用于处理具有外键关系的模型。 使用这些查询方法时,请确保你已经正确设置了Django的模型(models.py)和数据库配置(settings.py)。
数据库经典格式
from django.db import models
# Create your models here.
class MapPoint(models.Model):
TYPE_CHOICES = (
(1, '主站点'),
(0, '副站点'),
# 添加其他类型选项,如果需要的话
)
type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, default=1)
x = models.FloatField() # 根据数据,x应该是一个浮点数
y = models.FloatField() # y同样是一个浮点数
z = models.FloatField() # z也是一个浮点数11
name = models.CharField(max_length=255) # 假设name的长度不会超过255个字符
class Meta:
db_table = 'Map_Point'
|