Django------数据库
python
复制代码
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'
python
复制代码
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)
python
复制代码
# 查询数据
# 使用 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)
python
复制代码
# 排序: 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)
python
复制代码
# 大小比较
# 大于 : 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)
python
复制代码
# between 100 and 500
# 取区间:range(100 , 500)
data = Book.objects.filter(inventory__range=(100 , 520))
print(data)
python
复制代码
# like %:匹配0到多个字符 _:匹配一个字符(一个下划线匹配一个字符)
# startswith 匹配以什么字符开头
data = Book.objects.filter(book_name__startswith='追') # like '追%'
print(data)
# endswith 匹配以什么字符结尾
data = Book.objects.filter(book_name__endswith='人') # like '%人'
print(data)
python
复制代码
# 修改数据
# 先获取到数据对象 , 再通过对象进行修改
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)
python
复制代码
# 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])
python
复制代码
# 且或非
# 且 &
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)
python
复制代码
# F 表达式 ,直接在数据库中完成修改操作 , 不会将数据对象从数据库中读取到 Python 的内存中
from django.db.models import F
data = Book.objects.get(id=10)
data.inventory = F('inventory') + 520
data.save()
python
复制代码
# 聚合函数
# 要使用聚合函数查询的时候需要和 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)
python
复制代码
# 删除数据 delete 方法
# 先获取到要删除的数据对象 , 然后再使用 delete 方法
data = Book.objects.get(id=4).delete()
print(data)
data = Book.objects.all().delete()
print(data)