# """ ---- 正向查询按字段,反向查询按表名 一: 一对多 正向查询:(字段对象.关联表.查询字段) x_obj = models.Book.objects.filter(xxx).first() x_obj.publish.email 反向查询:(字段对象.要查询的表名小写_set.all()) x_obj = models.Publish.objects.filter(xxx).first() for i in x_obj.book_set.all(): print(i) 二: 多对多 正向查询:(字段对象.关联表.all()) 查询所有 x_obj = modles.Bookobjects.filter(xxx).first() for author in x_obj.authors.all(): print(author.name, author.age) 反向查询:(字段对象.关联表_set.all()) x_obj = modles.Author.objects.filter(xxx).first() for book in x_obj_set.all(): print(book.title) 三:一对一 正向查询:(字段对象.关联表名.关联表名字段) x_obj = modles.Author.objects.filter(xxx).first() x_obj = authorDetail.telephone 反向查询:() x_obj = modles.AuthorDetail.objects.filter(xxx).first() x_obj.author.name 四:聚合/分组 聚合: from django.db.models import Sum,Count,Avg ret = models.Book.objects.all().aggregate(price=Sum('price')) 分组: 1. queryset对象.annotate() 2. annotate进行分组统计,按前面select 的字段进行 group by 3. annotate() 返回值依然是 queryset对象,增加了分组统计后的键值对 modles.dep.objects.values("name").annotate(c=Count('emp__name')).values('name','c') # 查询 dep 表, 按name 分组 , 将 emp下的name字段计数,返回结果是 name字段 和 计数结果 modles.book.objects.values('id').annotate(c=Content( )) """#
直接执行原生的SQL语句,类似pymysql的用法 # from django.db import connection # cursor = connection.cursor() # 获取光标,等待执行SQL语句 # cursor.execute("""SELECT * from person where id = %s""", [1]) # row = cursor.fetchone() # print(row)