制作一个“删除书籍”的页面
- 点击‘查看所有书籍’页面中的‘删除’;删除当前书籍(伪删除)
- 视图函数 delete_book
- 路由http://127.0.0.1:8000/bookstore/delete?book_id=xx
注意:相关查询获取数据的地方,要过滤出活跃数据 一个F对象代表数据库中某条记录的字段的信息 作用: -通常是对数据库中的某条记录的字段的信息 -用于类属性(字段)之间的比较 语法: from django.db.models import F F('列名’)
更新Book实例中所有的零售价涨10元
Book.objects.all().update(market_price=F('market_price')+10)
'UPDATE 'bookstore_book' SET 'market_price' =('bookstore_book'.market_price'+10)
books = Book.objects.all()
for book in books:
book.market_prince = book.marget_price+10
book.save()
F对象
EG:今天天气真好----点赞 def add_like(request,topic_id): #取出文章 topic = Topic.objects.get(id = topic_id) #更新 new_like = topic.like+1 topic.like = new_like topic.save() old -> update topic set like =1 where id =xxx F ->update topic set like = like+1 where id = xxx
对数据库中的连个字段的值进行比较,列出哪些书籍的零售价高于定价
from django.db.models import F
from bookstore,models import Book
books = Book.objects.filter(market_price__gt = F('price'))
'SELECT * FROM 'bookstore_book' WHERE
'bookstore_book'.market_price'
('bookstore_book','price')
for book in books:
print(book.title,'定价':,book.price,'现价:',book,market_price)
Q对象
- 当在获取查询结果集使用复杂的逻辑或|、逻辑非~等操作时可以借助与Q对象进行操作
如:想找出定价低于20元 或者清华大学出版社的全部书。可以写成Book.objects.filter(Q(price__It=20)|Q(pub=“清华大学出版社”)) Q对象在数据包 django.db.models 中。需要先导入在使用
- 、作用:在条件中用来实现除and(&)以外的or(|)或not(~)操作运算符:& 与操作;| 或操作;
~ 非操作
语法: from django.db.models import Q Q(条件1)|Q(条件2) 或 Q(条件1)&Q(条件2)和 Q(条件1)&~Q(条件2)条件1成立且条件2不成立 实例: from django.db.models import Q #查询清华大学出版社的书或价格低于50的书 Book.objects.filter(Q(market_price__It=50)|Q(pub_house=‘清华大学出版社’))
查询不是机械工业出版社的书且价格低于50的书
Book.objects.filter(Q(market_price__It=50) & ~Q(pub_house='机械工业出版社'))
聚合查询——分组聚合 分组聚合是通过计算查询结果找那个每个对象所关联的对象集合,从而得到总计值(也可以是平均值或总和),即为查询集的每一项生成聚合 语法: -QuerySet.annotate(结果变量名=聚合函数(‘列’)) 返回值: -QuerySet
1.通过先用查询结果MyModel.objects.values查询要分组聚合的列 MyModel.objects.values(‘列1’,‘列2’) 如:
pub_set = Book.objects.values('pub')
print(pub_set)
2.通过返回结果的QuerySet.annotate方法分组聚合得到分组结果 QuerySet.annotate(名=聚合函数(‘列’))
pub_count_set =
pub_set.annotate(myCount = Count('pub'))
print(pub_count_set)
原生数据库操作
Django也可以支持直接用sql语句的方式通信数据库 查询:使用MyModel.objects.raw()进行 数据库查询操作查询 语法:MyModel.objects.raw(sql语句,拼接参数) 返回值:RawQuerySet集合对象
books = models.Book.objects.raw('select * from bookstore_book ')
for book in books:
print(book)
攻击结果:可查询出所有用户数据
|