八、Django分组查询
分组查询、F查询和Q查询 分组查询 统计每个出版社出版的书籍的平均价格 第一种方式 obj = models.Book.objects.values('publishs_id').annotate(a=Avg('price')) ## select avg (price) from app01_ book GROUP BY publishs_ id; 第二种方式 obj = models.Publish.objects.annotate(a=Avg('book__price')) return HttpResponse(obj.values('a')) F查询 F查询一般用于单表两个字段比较 示例表 class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField( max_length=32) good = models.IntegerField(default=1)#点赞 comment = models.IntegerFie ...
七、django学习之聚合函数
七、django学习之聚合函数 如何使用 from django.db.models import Avg,Max,Min,Sum models.Book.objects.all().aggregate(Avg('price')) models.Book.objects.all().aggregate(price = Avg('price')) #{'price':22.6} Book.objects.aggregate(Avg('price'), Max('price'), Min('price')) #count('id'),count(1)也可以统计个数,Book.objects.all().aggregete和Book.objects.aggregate(),都可以 #{'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')} 其他 返回类型为dic,也就是python的字典格式,不能再用django提供的orm操作 ...
六、Django学习之基于下划线的跨表查询
六、Django学习之基于下划线的跨表查询 一对一 正向查询的例子为 已知用户名,查询用户的电话号码。反向查询例子反之。 正向查询 其中下划线前的表示表名,无下划线的表示的是Author表 result = models.Author.objects.filter(name='admin').values("authorDetail__telephone",'name','age') 反向查询 values可以不写,则去除能拿到的全部数据。filter中的双下划线表示联表 result = models.AuthorDetail.objects.filter(author__name='admin').values('telephone') 一对多 正向查询 result = models.Book.objects.filter(title='第一本书').values("publishs__name") 反向查询 result = models.Publish.objects.filter(book__title='第一本书').values('name') 多对多 ...
五、Django基于对象的跨表查询
六、基于对象的跨表查询 正向与反向查询 关键在于ForeignKey字段写的位置。例如下面这段代码, 关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的数据叫做正向查询,反之叫做反向查询 Publish查询Book的内容就是反向查询 Book查询Publish的内容就是正向查询 class Publish(models.Model): name=models.CharField( max_length=32) city=models.CharField( max_length=32) email=models.EmailField() #charfield -- asdfasdf def __str__(self): return self.name #书籍表 class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField( max_length=32) ...
四、Django关系表字段介绍
关系表介绍及使用 一对一关系 xx = models.OneToOneField(to='表名',to_field='字段名',on_delete=models.CASCADE) #on_delete:删除时的一些级联效果,to_field可以不写,默认是关联到另一张表的主键,on_delete在1.x版本的django中不用写,默认是级联删除的,2.x版本的django要写. 增加数据 方式1 new_author_detail = models.AuthorDetail.objects.create( birthday='1979', telephone='138', addr='black' ) # 方式1 models.Author.objects.create( name='王涛', age=18, #直接将对象赋值属性 authorDetail=new_author_detail ) 方式2 new_author_d ...
三、Django查询表记录
查询接口 all() 查询所有结果,结果是queryset类型 filter(**kwargs) and条件关系:参数用逗号分割表示and关系 models.Student.objects.filter(id=1,name='dazhuang').update( name='大壮禅师', age = 78, ) 其中filter的参数也可以通过字典方式传入 odels.Student.objects.filter(**{'id':7,'name':'大壮禅师'}).update(age=100) models.Student.objects.all().filter(id=7) #queryset类型可以调用fitler在过滤 get(**kwargs) 返回与所给筛选条件相匹配的对象,不是queryset类型,是行记录对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。捕获异常try。 Book.objects.get(id=1) exclude(**kwargs) 排除的意思,它包含了与所给筛选条件不匹配的 ...
二、Django简单的增删改查
增加数据 第一种方式 def index(request): #创建记录方式1 #实例化要添加的记录(对象) student_obj = models.Student( name='dazhuang', age=23, ) #自动刷新并存储到数据库 student_obj.save() return render(request,'index.html') 第二种方式 常用方法 def index(request): #创建记录方式2 # new_obj为返回值,返回这个类的对象 (model对象) new_obj = models.Student.objects.create(name='xiaozhuang',age=5) print(new_obj.name) print(new_obj.age) return render(request,'index.html') 第三种方式 批量创建 def index(request): ...
一、Django连接与建立数据库
Django连接与建立数据库 连接MySQL数据库 配置文件 找到DATABASES对应的设置,修改为MySQL的配置即可 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'bms', # 要连接的数据库,连接前需要创建好 'USER':'root', # 连接数据库的用户名 'PASSWORD':'', # 连接数据库的密码 'HOST':'127.0.0.1', # 连接主机,默认本级 'PORT':3306 # 端口 默认3306 } } 连接数据库 在项目的__init__.py文件中进行编辑. 用于告诉django使用pymysql模块代替MySQLdb模块。 import pymysql pymysql.install_as_MySQ ...
Python面向对象
类的空间问题 添加对象或类的属性 添加对象或类的属性哪里(类__init__方法中、类方法中、类外)都可以添加。 class A: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex # 类外面可以: obj = A('barry') obj.age = 18 print(obj.__dict__) # {'name': 'barry', 'age': 18} # 类内部也可以: obj = A('barry') # __init__方法可以。 obj.func('男') # func 方法也可以。 对象以及类查询"名字"的顺序 对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->… 类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> … 上面的顺序都是单向不可逆,类名 ...
Python网络编程
基础理论知识 C/S 、B/S架构 架构名称 定义 优点 缺点 C/S 基于客户端与用户端之间的架构 界面和操作丰富,安全性容易保证,响应速度快 需要开发两套程序,开发维护成本高,兼容性差 B/S 基于C/S架构的一种特殊的C/S架构,浏览器与服务端之间的架构。 分布性强,客户端几乎不需要维护,开发简单,共享性强,维护简单方便 个性化低,安全性及响应速度需要花费巨大设计成本 CS响应速度快,安全性强,一般应用于局域网中,但是开发维护成本高;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。所以有些单位日常办公应用BS,在实际生产中使用CS结构。 网络通信 单个客户端与服务端通信 服务端代码示例 import socket # 1. 创建socket对象(买电话) phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 参数可以默认不写 # 2. 绑定IP地址和端口 # 安装电话卡 phone.bind(('127.0.0.1',8848)) # 3. 监听(开机) ...