笔记参考资料 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='性别', )