笔记参考资料 https://www.cnblogs.com/wupeiqi/articles/4938499.html 这是大神啊,资料总结很棒
ORM
https://www.cnblogs.com/wupeiqi/articles/6216618.html
排序:
sql = BookInfo.bpm.all().order_by('-id','name') #倒叙id,如果有重复就使用name排序
打印SQL
print(sql.query)
分组 统计 加 筛选
BookInfo.object.values('class_id').annotate.(xxxx=Count('id')).filter(xxx_gt=2)
字段自加 F
from django.dbmodels import F BookInfo.object.all().update(age=F('age')+1)
extra 使用
Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,)) Entry.objects.extra(where=['headline=%s'], params=['Lennon']) Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"]) Entry.objects.extra(select={'new_id': "select id from tb where id > %s"}, select_params=(1,), order_by=['-nid'])
原生数据查询 切换数据库
from django.db import connection, connections cursor = connection.cursor() # connection=default数据 cursor = connections['db2'].cursor() #切换数据库 cursor.execute("""SELECT * from auth_user where id = %s""", [1]) row = cursor.fetchone() row = cursor.fetchall()
models.py
from django.db import models # Create your models here. class UserInfo(models.Model): nickname = models.CharField(max_length=32) username = models.CharField(max_length=32) password = models.CharField(max_length=32) gender_choices = ( (1,'男'), (2,'女'), ) gender = models.IntegerField(choices=gender_choices) # 连表反向查询 ''' userinfo_set.all() g = models.ForeignKey('UserIfo',related_query_name='a') 反向查 a_set.all() g = models.ForeignKey('UserIfo',related_name='a') 反向查 a.all() ''' class U2U(models.Model): g = models.ForeignKey('UserInfo',related_name='a',on_delete=models.CASCADE) b = models.ForeignKey('UserInfo',related_name='b',on_delete=models.CASCADE) # 新闻评论 class New(models.Model): new_id = models.IntegerField() #新闻ID contemnt= models.CharField(max_length=64) #评论内容 user = models.IntegerField() #评论用户 #自关联 只能评论已经评论过得 reply = models.ForeignKey('New',null=True,blank=True)
views.py
from django.http import HttpResponse from django.shortcuts import render # Create your views here. from app01.models import U2U, UserInfo def test(request): # 1. 插入数据 ''' # 第一种 U2U.objects.create(b_id=3,g_id=1) # 第二种 boy = UserInfo.objects.filter(gender=2,id=2).first() girl = UserInfo.objects.filter(gender=1,id=4).first() U2U.objects.create(b=boy,g=girl) ''' # 2. 查数据 xz = UserInfo.objects.get(pk=1) print(xz.nickname) result = xz.a.all() for re in result: print(re.g.nickname) print(result) return HttpResponse('test')
from django.views.decorators.csrf import csrf_protect # 局部验证 注释 MIDDLEWARE 里 第四行 @csrf_protect def post(request): pass
<form action="app/post" method="post"> {% csrf_token %} name: <input type="text" name="name"> <br> age: <input type="number" name="age"> <br> <input type="submit"> </form>
{% csrf_token %}
# 局部验证 注释 MIDDLEWARE 里 第四行 @csrf_protect def post(request): pass
# 手动建表 love 批量添加数据 def insert(request): ''' 创建数据 ''' objs = [ Boy(name='方大爷'), Boy(name='李大爷'), Boy(name='王大爷'), Boy(name='赵大爷'), ] Boy.objects.bulk_create(objs,4) objs2 = [ Girl(nick='方姑姑'), Girl(nick='李姑姑'), Girl(nick='王姑姑'), Girl(nick='赵姑姑'), ] Girl.objects.bulk_create(objs2, 4) # 关系表 ''' Love.objects.create(b_id=11,g_id=2) Love.objects.create(b_id=11,g_id=1) Love.objects.create(b_id=12,g_id=3) Love.objects.create(b_id=12,g_id=4) ''' # 和 方大爷 有关系的姑姑 # obj = Boy.objects.get(name='方大爷') # love_list = obj.love_set.all() # print('-----------') # print(love_list.query) # print('-----------') # for list in love_list: # print(list.g.nick) # love_list = Love.objects.filter(b__name='方大爷') # print('-----------') # print(love_list.query) # print('-----------') # for list in love_list: # print(list.g.nick) # love_list = Love.objects.filter(b__name='方大爷').values('g__nick') #g__nick固定写法 # print('-----------') # print(love_list.query) # print('-----------') # for list in love_list: # print(list['g__nick']) # love_list = Love.objects.filter(b__name='方大爷').select_related('g') # print('-----------') # print(love_list.query) # print('-----------') # for list in love_list: # print(list.g.nick) return HttpResponse('添加') # 自动表 操作 app_boy_m def insBoyM(request): boy = Boy.objects.filter(name='方大爷').first() print(boy.id,boy.name) # 添加数据到 boy_m # boy.m.add(4) # boy.m.add(1,4) # boy.m.add(*[2,]) # 删除 # boy.m.remove(1) # boy.m.remove(1,4) # boy.m.remove(*[2,]) # 更新 boy.m.set([1,]) #全部重置 # 获取 bb = boy.m.all() #获取到的是 girl print(bb) gg = boy.m.filter(nick='方姑姑').first() # 删除 所有关于 方大爷的数据 boy.m.clear() print(gg.id) return HttpResponse('自动建表 男 操作') # 自动表 操作 app_boy_m def insGirlM(request): girl = Girl.objects.filter(nick='方姑姑').first() boys = girl.boy_set.all() print(boys) for g in boys: print(g.id,g.name) return HttpResponse('自动建表 女 操作')
代码文件
字段
from django.db import models # Create your models here. class CodeField(models.Model): # str zhanghao = models.CharField(max_length=10,unique=True) #账号 ip = models.GenericIPAddressField(max_length=20) #ip url = models.URLField(max_length=20) #url slug = models.SlugField(max_length=20) #url uuid = models.UUIDField(max_length=20) filePath = models.FilePathField() file = models.FileField() img = models.ImageField() # comm = models.CommaSeparatedIntegerField() # time dateTime = models.DateTimeField() # int int = models.ImageField() float = models.FloatField() decimal = models.DecimalField(max_digits=30,decimal_places=10) # 枚举 color_list = ( (1, '黑色'), (2, '白色'), (3, '蓝色') ) color = models.IntegerField(choices=color_list) # 参数 class Parameter(models.Model): user = models.CharField( max_length=20, verbose_name='用户名', ) email = models.EmailField( null=True, #字段可以为空 blank=True, #Admin中是否允许用户输入为空 verbose_name='邮箱', unique=True, help_text='1313', ) sex = models.IntegerField( blank=False, choices=[ (0,'请选择性别'), (1,'男'), (2,'女'), ], default=0, verbose_name='性别', )