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)


相关文章
|
1月前
|
存储 关系型数据库 MySQL
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
30669 0
|
1月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
144 7
|
12天前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用合集之基于django应用模板创建的FC,如何配置数据库
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
1月前
|
关系型数据库 MySQL 数据库连接
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
204 11
|
1月前
|
前端开发 API 数据库
Django(五):如何在Django中通过API提供数据库数据给前端
Django(五):如何在Django中通过API提供数据库数据给前端
|
1月前
|
SQL 数据库 开发者
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
|
1月前
|
SQL 缓存 数据库
在Python Web开发过程中:数据库与缓存,如何使用ORM(例如Django ORM)执行查询并优化查询性能?
在Python Web开发中,使用ORM如Django ORM能简化数据库操作。为了优化查询性能,可以:选择合适索引,避免N+1查询(利用`select_related`和`prefetch_related`),批量读取数据(`iterator()`),使用缓存,分页查询,适时使用原生SQL,优化数据库配置,定期优化数据库并监控性能。这些策略能提升响应速度和用户体验。
29 0
|
1月前
|
关系型数据库 API 数据库
Django中的数据库事务管理:确保数据一致性
【4月更文挑战第15天】Django框架提供强大的数据库事务管理,确保ACID属性,保证数据一致性和完整性。文章深入讨论了Django事务管理,包括使用`@transaction.atomic`装饰器和`transaction.atomic()`上下文管理器手动控制事务,以及低级API进行精细管理。注意避免长时间事务、选择合适隔离级别、正确处理异常及了解数据库特性。掌握这些技巧对构建可靠Web应用至关重要。
|
1月前
|
SQL 自然语言处理 数据库连接
Django ORM的魔力:简化数据库操作与迁移
【4月更文挑战第15天】Django ORM是Django框架的关键部分,提供了一种高级的面向对象方式与数据库交互,简化了手动SQL操作。通过定义Python数据模型,开发者能轻松创建数据库表结构,使用ORM执行查询、添加、修改和删除数据。Django ORM还自动化处理数据库连接、事务和数据类型转换。当模型变化时,Django的迁移工具帮助管理数据库结构的更新。通过这种方式,Django ORM促进了高效、专注于业务逻辑的Web开发。
|
1月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
157 0

热门文章

最新文章