Django——数据库

简介: Django——数据库

Django——数据库

class Book(models.Model):
    book_name = models.CharField(max_length=20)
    price = models.DecimalField(max_digits=5 , decimal_places=2)
    inventory = models.IntegerField()
    # auto_now_add 设置为 True , 在创建数据的时候设置当前时间 ,后续对应的字段修改数据 ,该时间不会变化
    create_time = models.DateField(auto_now_add=True)
    # auto_now 设置为 True , 在创建数据的时候设置当前时间 ,
    # 后续对应的字段修改数据 ,该时间也会跟着跟新为修改后的时间
    update_time = models.DateField(auto_now=True)
    # DateField 设置了 auto_now_add 和 auto_now 属性之后 ,在新增数据的时候可以不手动添加
    class Meta:
        db_table = 'book'
Book.objects.create(book_name='白夜行' , price=98.95 , inventory=520)
Book.objects.create(book_name='挪威的森林' , price=80.6 , inventory=510)
Book.objects.create(book_name='解忧杂货店' , price=53.25 , inventory=623)
Book.objects.create(book_name='三体' , price=120.5 , inventory=630)
Book.objects.create(book_name='平凡的世界' , price=100.66 , inventory=100)
Book.objects.create(book_name='人生的枷锁' , price=75.98 , inventory=50)
Book.objects.create(book_name='追风筝的人' , price=46.33 , inventory=751)
Book.objects.create(book_name='月亮与六便士' , price=75.98 , inventory=60)
Book.objects.create(book_name='三国演义' , price=88.65 , inventory=751)
Book.objects.create(book_name='摆渡人' , price=30.12 , inventory=630)
# 查询数据
# 使用 all 查询表格中的所有数据
# values() 将数据以字典对象的方式显示
# values_list() 将数据以元组对象的方式显示
get_data = Book.objects.all().values_list()
# print(get_data)
get_data = Book.objects.filter(book_name='三体')
# print(get_data.values_list())
# get方法 , 获取单条数据 , 给定的条件也只能在数据表中是唯一的
# 如果不唯一 , 则抛出异常
get_data = Book.objects.get(id='6')
print(get_data)
print(get_data.book_name)
# 排序: order_by , 默认情况是升序排序
data = Book.objects.order_by('price')
for d in data:
    print(d.book_name , d.price)
print('*'*20)
# 降序排序 , 在指定的属性名前面加上 '-'
data = Book.objects.order_by('-price')
for d in data:
    print(d.book_name, d.price)
print('*' * 20)
# reverse ,排序翻转,将升序变成降序 , 降序变为升序
data = Book.objects.order_by('price').reverse()
for d in data:
    print(d.book_name, d.price)
# 大小比较
# 大于 : gt
data = Book.objects.filter(price__gt=80)
# print(data)
# 大于等于 :gte
data = Book.objects.filter(price__gte=75.98)
# print(data)
# 小于 : lt
data = Book.objects.filter(price__lt=75.98)
print(data)
# 小于等于 :lte
data = Book.objects.filter(price__lte=75.98)
print(data)
# between 100 and 500
# 取区间:range(100 , 500)
data = Book.objects.filter(inventory__range=(100 , 520))
print(data)
# like %:匹配0到多个字符  _:匹配一个字符(一个下划线匹配一个字符)
# startswith 匹配以什么字符开头
data = Book.objects.filter(book_name__startswith='追')   # like '追%'
print(data)
# endswith 匹配以什么字符结尾
data = Book.objects.filter(book_name__endswith='人')  # like '%人'
print(data)
# 修改数据
# 先获取到数据对象 , 再通过对象进行修改
data = Book.objects.get(id=2)
# 使用对象.属性名进行重新赋值的操作
data.price= 75.23
# data.save()
# update() 方法修改 , 这个方法可以一次性修改多条数据
data = Book.objects.filter(id=5)
# data.update(inventory=300)
data = Book.objects.filter(id__in=[3 , 8 , 9])
data.update(inventory=300)
# count 获取到查询的数据对象个数
# 直接查询整个表中有多少条数据
data = Book.objects.count()
print(data)
data = Book.objects.filter(price__gt=80).count()
print(data)
# 对查询得到的数据对象查询集进行切片
data = Book.objects.all()
print(data)
print(data[0:4])
data = Book.objects.filter(id__range=(0 , 4))
print(data)
print(data[2])
# 且或非
# 且  &
data = Book.objects.filter(price__gt=75 , inventory__gte=300)
# print(data)
# &  这个方式需要查询两个对象进行连接
data = Book.objects.filter(price__gt=75) & Book.objects.filter(inventory__gte=300)
# print(data)
# 或 |
data = Book.objects.filter(price__lt=75) | Book.objects.filter(inventory__gte=300)
print(data)
# Q 对象 是进行且或非的运算操作
from django.db.models import Q
# Q(条件)
data = Book.objects.filter(Q(price__gt=75) & Q(inventory__gte=300))
# print(data)
data = Book.objects.filter(Q(price__lt=75) | Q(inventory__gte=300))
# print(data)
# 非 ~
data = Book.objects.filter(~Q(price__lt=75))
print(data)
# F 表达式 ,直接在数据库中完成修改操作 , 不会将数据对象从数据库中读取到 Python 的内存中
from django.db.models import F
data = Book.objects.get(id=10)
data.inventory = F('inventory') + 520
data.save()
# 聚合函数
# 要使用聚合函数查询的时候需要和 aggregate 方法使用
from django.db.models import Max , Min , Sum , Avg
# 集合函数查询返回的结果是一个字典
# 字典的键是默认为: 字段名__聚合函数名
data = Book.objects.aggregate(Max('price'))
print(data)
data = Book.objects.filter(id__in=[1 , 5 , 7]).aggregate(Avg('price'))
print(data)
# 自定义集合函数查询结果的键名
data = Book.objects.filter(id__in=[1, 5, 7]).aggregate(price = Avg('price'))
print(data)
# 删除数据 delete 方法
# 先获取到要删除的数据对象 , 然后再使用 delete 方法
data = Book.objects.get(id=4).delete()
print(data)
data = Book.objects.all().delete()
print(data)


相关文章
|
17天前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
84 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
75 0
|
4月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
299 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
4月前
|
存储 关系型数据库 MySQL
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
本文介绍了一个基于Python Django框架开发的医院管理系统,该系统设计了管理员、用户和医生三个角色,具备多用户功能,并使用MySQL数据库进行数据存储和管理。
177 4
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
|
3月前
|
数据库 Python
django中数据库外键可以自定义名称吗
django中数据库外键可以自定义名称吗
|
4月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。
|
4月前
|
监控 数据可视化 前端开发
基于python django生产数据与计划大屏,可链接数据库
本文介绍了一个基于Python Django框架开发的生产数据与计划大屏系统,该系统能够实时采集和展示生产数据,支持数据可视化和实时更新,以提高生产监控的效率和质量。
|
4月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
46 0