ORM操作:
<1> 添加记录方法
# create方式
#Book.objects.create(title="python",price=233)
# save 方式
book_obj=Book(title="Linux",price=122)
book_obj.save()
一对多添加方式:
Book.objects.create(title="python",price=223,publisher_id=2)
book_obj=Book(title="Linux",price=122,publisher=publish_obj)
多对多的添加方式:
ManyToManyField:
# 绑定关系
book_obj.authors.add(*author_list) # book_obj.authors: nid=2 的书籍关联的作者的对象集合
# 解除关系
book_obj.authors.clear()
book_obj.authors.remove()
手动创建第三张表:
Book2Author.objects.create(book_id=1,author_id=1)
<2> 查询
单表查询
表.objects.all() ----- QuerySet的集合对象 [obj1,obj2] obj:就是当前操作表的一条记录
表.objects.filter() ----- QuerySet的集合对象 [obj1,obj2]
表.objects.get() ----- model对象 : obj 当前操作表的一条记录
QuerySet.first() ----- model对象 eg: 表.objects.all().first()
QuerySet.last() ----- model对象
表.objects.values("title","price")
万能的__:
表.objects.filter(字段__keyword)
models.Tb1.objects.filter(id__lt=10,id__gt=1) # 获取id大于1 且 小于10的值
models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
models.Tb1.objects.filter(name__contains="ven")
models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and
#startswith,istartswith, endswith, iendswith
关联查询(多表查询)
sql:
子查询
select name from dep whrere id=
(select dep_id from emp whrere name="张三")
联表查询
select dep.name from emp inner join dep on emp_dep_id=dep.id where emp.name="张三"
两个手段: 1 对象 2 __
1 对象
# 查询python这本书的出版社的联系方式 (一对多)
#ret=book_obj.publisher.email
#print(ret)
# 查询Linux的所有作者的名字
book_obj = Book.objects.get(title="Linux")
author_list=book_obj.authors.all()
for author in author_list:
print(author.name)
2 __ (******) 重点:filter方法与value方法都可以进行跨表查询
# 查询alex出版过的所有书籍名称
# 方式1 正向查询
# ret=Book.objects.filter(authors__name="alex").values("title")
# 方式2 反向查询
# ret=Author.objects.filter(name="alex").values("book__title")
# print(ret) # <QuerySet [{'book__title': '金瓶梅'}]>
# 查询出版了python这本书的出版社的名字
# 正向:
ret1=Book.objects.filter(title="python").values("publisher__name")
# 反向:
ret2=Publish.objects.filter(book__title="python").values("name")
聚合与分组查询
sql:
聚合函数 max min count avg sum
select * from emp group by 字段
聚合:ret=Book.objects.all().aggregate(PriceAvg=Avg("price"),maxPrice=Max("price"))
分组:ret=Book.objects.filter(authors__name="oldboy").aggregate(Sum("price"))
F查询与Q查询
from django.db.models import F,Q
#Book.objects.update(price=F("price")+100)
# Q 查询 逻辑与& 逻辑或 | 逻辑非 ~
ret=Book.objects.filter(
Q(title__startswith="p")|Q(title__startswith="L")
)
<3> 修改
QuerySet.update()
eg: Book.objects.filter(id__gt=10).update()
eg: Book.objects.get(id=5).update() # models对象不能调用update方法
<4> QuerySet.delete()
Ajax(重点)
什么是Json?
是一种轻量级的数据交换格式
json字符串 : 符合json规范的字符串
json对象 : JS对象的子集
用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。
ajax优点:1 异步交互 2 局部刷新
实现ajax:
1 jquery(兼容了大多数浏览器)
形式1:
$.ajax(settings)
形式2:
$.ajax(url,[settings])
$.ajax({
url:"/path/"
type:"POST",
data:{"":""}
success:function(data){
alert(data) // server返回的数据
}
})
2 JS
分页器(page)
COOKIE & SESSION
本页面三个demo分别为Orm_query ajax_demo page_demo