首页 > 代码库 > python Django知识点总结

python Django知识点总结

python Django知识点总结

一、Django创建项目:

CMD 终端:Django_admin startproject sitename(文件名)

其他常用命令:

其他常用命令:
通过类创建表--python manage.py makemigrations
--python manage.py migrate
其他命令:
python manage.py runserver 0.0.0.0
python manage.py stratapp appname
python manage.py suncdb
python manage.py createsuperuser

二、创建数据库(ORM)

a.数据库表的增

增:
在原来models.py文件中添加一个新的类(ORM---类就是表,对象是行)
在Terminal执行:--python manage.py makemigrations --python manage.py migrate 命令更新数据库
技术分享
 1 这是原来的表
 2 class UserINfo(models.Model):
 3     nickname = models.CharField(max_length=32)
 4     username = models.CharField(max_length=32)
 5     password = models.CharField(max_length=32)
 6     gender_list=(
 7         (1,),
 8         (2,),
 9     )
10     gender = models.IntegerField(choices=gender_list)
11     m = models.ManyToManyField(UserINfo)
12 -------------------------------------------------------------------------
13 这是新增的表
14 class User(models.Model):
15     new_id=models.IntegerField(null=True)
16     new_tabe= models.CharField(max_length=32)
17     new_content =models.CharField(max_length=64)
18     new_root = models.CharField(max_length=32)
19     content = models.ForeignKey(User,null=True,blank=True,related_name=xxx)
增 演示

b.数据库表的删

删:
在原来创建表的py文件中把不要的表对应的类注释掉(ORM---类就是表,对象是行)
在Terminal执行:--python manage.py makemigrations
	   --python manage.py migrate
	   命令更新数据库
技术分享
 1 这是数据库的表
 2 class GTB(models.Model):
 3     g = models.ForeignKey(Boy,null=True)
 4     b = models.ForeignKey(Grily,null=True)
 5 
 6 -------------------------------------------------------------
 7 这是删除数据库表
 8 # class UserInfo(models.Model):
 9 #     nickname = models.CharField(max_length=32)
10 #     username = models.CharField(max_length=32)
11 #     password = models.CharField(max_length=32)
12 #     gender_list=(
13 #         (1,‘男‘),
14 #         (2,‘女‘),
15 #     )
16 #     gender = models.IntegerField(choices=gender_list)
删 演示

c.数据库表的改

改:
在原来创建表的py文件中把要进行的表对应的类进行调整(ORM---类就是表,对象是行)
在Terminal执行:--python manage.py makemigrations --python manage.py migrate 命令更新数据库
技术分享
 1 这是数据库未进行修改的表
 2 class Boy(models.Model):
 3     username = models.CharField(max_length=32)
 4     nickname = models.CharField(max_length=32)
 5     password = models.CharField(max_length=32)
 6 
 7 
 8 ------------------------------------------------------------
 9 这是要进行更改数据的表
10 class Boy(models.Model):
11     username = models.CharField(max_length=32)
12     name = models.CharField(max_length=32)
13     password = models.CharField(max_length=32)
改 演示

d.数据库表行的增

创建一个url对应的函数,通过浏览器访问这个url触发相对应的函数
在函数中设置数据库行的增加命令
在对表的行进行增加时,参数是创建表时的每列名称以及对应的参数值
models.Body.objects.create(username=‘波多爱军‘,password=123,sex=1)
技术分享
1 def index(request):
2     models.Body.objects.create(username=波多爱军,password=123,sex=1)
3     models.Body.objects.create(username=苍爱军,password=123,sex=1)
4     models.Body.objects.create(username=吉泽爱军,password=123,sex=1)
5     models.Body.objects.create(username=田原爱军,password=123,sex=1)
行增加 演示

e.数据库表行的删

创建一个url对应的函数,通过浏览器访问这个url触发相对应的函数
在函数中设置数据库行的删除命令
在对表的行进行增加时,参数是创建表时的每列名称以及对应的参数值
models.Body.objects.delete(username=‘alex’)
技术分享
1 def index(request):
2     models.Body.objects.delete(username=波多爱军,password=123,sex=1)
行删除 演示

f.数据库表行的改

创建一个url对应的函数,通过浏览器访问这个url触发相对应的函数
在函数中设置数据库行的修改命令
在对表的行进行增加时,参数是创建表时的每列名称以及对应的参数值
models.Body.objects.filter(username=‘alex).update(username=‘波多爱军‘)
技术分享
1 def index(request):
2 models.Body.objects.filter(username=波多爱军,password=123,sex=1).update(username=波多爱军,password=233,sex=2)
行 修改

g.数据库表行的查

models.Body.objects.filter(username=‘alex).all()
技术分享
1 def gets(request):
 2 #     models.UserInfo.objects.all()
 3 #     # 查看全部行的数据
 4 
 5 #     models.UserInfo.objects.filter(id=2)
 6 #     #查看id等于2的哪行数据
 7 
 8 #     models.UserInfo.objects.first()
 9 #     #查看第一个数据
10 
11 #     models.UserInfo.objects.last()
12 #     #查看最后一个数据
13 
14 #     models.UserInfo.objects.exclude(id=4)
15 #     #查看id不等于4的所有内容
16 
17 #     models.UserInfo.objects.filter(name=‘seven‘).count()
18 #     #获取名字等于seven的总数
19 
20 #     models.UserInfo.objects.get(name=‘seven‘)
21 #     #获取名字等于seven的单个对象
22 
23 #     models.UserInfo.objects.filter(id_gt=1)
24 #     #查看id大于1的行内容
25 
26 #     models.UserInfo.objects.filter(id_lt=2)
27 #     #查看id小于2的行内容
28 
29 #     models.UserInfo.objects.filter(id_gte=1)
30 #     #查看id大于等于1的行内容
31 
32 #     models.UserInfo.objects.filter(id_let=5)
33 #     #查看id小于等于5的行内容
34 
35 #     models.UserInfo.objects.filter(id_lt=10,id_gt=1)
36 #     #查看id大于1且id小于10的行内容
37 
38 #     models.UserInfo.objects.filter(id__in=[11,33,44])
39 #     #查看id在不在列表中
40 
41 #     models.UserInfo.objects.exclude(id_in=[11,33,44])
42 #     #查看id不在列表中的的数据内容
43 
44 #     models.UserInfo.objects.filter(pud_date__isnull=True)
45 #     #查看pud_date不是为空
46 
47 #     models.UserInfo.objects.filter(name__contains=‘alex‘)
48 #     #查看名字中列中包含alex的数据内容
49 
50 #     models.UserInfo.objects.exclude(name__icontains=‘alex‘)
51 #     #查看名字中列中包含alex(大小写不敏感)的数据内容
52 
53 #     models.UserInfo.objects.filter(ut_id__range=[1,5])
54 #     #范围(bettwen  end)
55 
56 #     models.UserInfo.objects.filter(name__startswith=‘alex‘)
57 #     #查看名字以alex开头的数据行
58 
59 #     models.UserInfo.objects.filter(name__istartswith=‘alex‘)
60 #     #查看名字以alex开头(大小写不敏感)的数据行
61 
62 #     models.UserInfo.objects.filter(name__endswith=‘egon‘)
63 #     #查看名字以egon结尾的数据行
64 
65 #     models.UserInfo.objects.filter(name__iendswith=‘egon‘)
66 #     #查看名字以egon(大小写不敏感)的数据行
67 
68 #     models.UserInfo.objects.all().order_by(‘-id‘)
69 #     #以降序进行排列查看
70 
71 #     models.UserInfo.objects.all().order_by(‘id‘)
72 #     #以升序进行排列查看(默认使用升序)   
73  
74 #     models.UserInfo.objects.all()[1:4]
75 #     #分页limit offset 起始位置和结束位置
行 查看

三、F

====F更新时对比之前的内容(在原来的值中更新)====
models.UserInfo.objects.all().update(age=F(‘age‘)+1)
技术分享
1 # from django.db.models import F
2 # models.UserInfo.objects.all().update(age=F(‘age‘)+1)
F 演示

四、Q

====Q用于构造复杂查询条件====
    # Q(nid__gt=10)
    # #创建一个Q
    # Q(nid=8) | Q(nid__gt=10)
    # #俩个Q是或的关系
    # Q(nid=8) & Q(nid__gt=10)
    # #俩个Q是与的关系
    # Q(nid=8) | Q(nid__gt=10) & Q(nid=7)
    # #Q8 和 Q7 或 Q10 和 Q7的关系
技术分享
1 #方法一:
 2     # Q(nid__gt=10)
 3     # #创建一个Q
 4     # Q(nid=8) | Q(nid__gt=10)
 5     # #俩个Q是或的关系
 6     # Q(nid=8) & Q(nid__gt=10)
 7     # #俩个Q是与的关系
 8     # Q(nid=8) | Q(nid__gt=10) & Q(nid=7)
 9     # #Q8 和 Q7 或 Q10 和 Q7的关系
10 
11 #方法二:
12     # from django.db.models import Q
13     # q1=Q()
14     # q1.connector=‘OR‘
15     # q1.children.append((‘id_gt‘,1))
16     # q1.children.append((‘id‘,10))
17     # q1.children.append((‘id‘,9))
18     #
19     # q2=Q()
20     # q2.connector=‘OR‘
21     # q2.children.append((‘c1‘,2))
22     # q2.children.append((‘c1‘,10))
23     # q2.children.append((‘c1‘,9))
24     #
25     # q3=Q()
26     # q3.connector=‘AND‘
27     # q3.children.append((‘id‘,1))
28     # q3.children.append((‘id‘,2))
29     # q2.add(q3,‘OR‘)
30     #
31     # con=Q()
32     # con.add(q1,‘AND‘)
33     # con.add(q2,‘AND‘)
34     #
35     # models.UserInfo.objects.filter(con)
Q 演示

五、extra

======================extra是一种扩展方式========================
models.UserInfo.objects.extra(where=[‘headline=%s‘],params=[1,])

def extra(self,select=None,where=None,params=None,tables=None,order_by=None,select_params=None)
    where ---------params
    select ----------select_params
技术分享
1 1 # def gets(request):
2 2 #     models.UserInfo.objects.extra(where=[‘headline=%s‘],params=[1,])
3 3 #     #where 和 params 配合使用
4 4 #     models.UserInfo.objects.extra(where=["foo=‘a‘ OR bar=‘a‘,baz=‘a"])
5 5 #     #查询条件是foo和baz等于a   或者bar和baz等a
6 6 #     models.UserInfo.objects.extra(select={‘new_id‘:"select id from tb where id>%s"},select_params=(1,),order_by=[‘-nid‘])
7 7 #     #查询id大于1并以降序排列
extra 演示

六、连表

a.对象连表

1     # models.UserInfo.objects.all()
2     #查看UserIinfo表的所有行
3     # models.UserInfo.objects.filter(id=2)
4     ##查看UserInfo表id等于2的哪一行内容
5     # result = models.UserInfo.objects.all()
6     ##通过此方式返回一个列表中存放的是对象(object)
7     # for row in result:
8     #     print(row.name,row.id,row.age,row.ut.title)
9         ##以是对象的方式进行连表

b.字典连表

1     # models.UserInfo.objects.all()
2     ## 查看表的所有行
3     # models.UserInfo.objects.filter(id=1)
4     ##查看表的id是1的行
5     # result=models.UserInfo.objects.all().values(‘id‘,‘name‘,‘ut__title‘)
6     ##通过此方式连表返回个列表,列表中存放的是字典对象(dict)
7     # for row in result:
8     #     print(row)

c.元组连表

1     # models.UserInfo.objects.all()
2     ## 查看表的所有行
3     # models.UserInfo.objects.filter(id=2)
4     ##查看表的id是2的行
5     # result=models.UserInfo.objects.all().values_list(‘id‘,‘name‘,‘ut__title‘)
6     ##通过此方式连表返回个列表,列表中存放的是元组对象(tuple)
7     # for row in result:
8     #     print(row)

七、正反向查找

a.对象正向查找

============================对象正向查找=========================
技术分享
1 result = models.UserInfo.objects.all()
2    for obj in result:
3          print(obj.name,obj.age,obj.ut_id,obj.ut.title)
4        #打印obj对象的名字,对象的年龄,对象的外键,ut设置外键的列就是相当于ut表对应的主键(现在拿到就是ut那个表可以拿ut对应的一行所有内容)
5     result = models.UserInfo.objects.all().first()
6      ##获取表中所有的行但只是拿第一个对象,也就是第一行
7      print(result.name,result.age,result.ut)
对象 正向查找

b.对象反向查找

============================对象反向查找=========================
技术分享
1     # obj = models.UserType.objects.all().last()
2     # print(‘用户类型‘,obj)
3     # for row in obj.userinfo_set.all():
4     #     print(row.name,row.age)
对象反向查找

c.字典正向查找

============================字典正向查找=========================
技术分享
1     # models.UserInfo.objects.filter(id__gt=7).delete()
2     #v=models.UserInfo.objects.all().values(‘name‘,‘age‘,‘ut__title‘)
3     # print(v)
字典正向查找

d.字典反向查找

============================字典反向查找=========================
技术分享
1 1     # vv = models.UserType.objects.values(‘title‘,‘userinfo__name‘)
2 2     # print(vv)
字典反向查找

e.元组正向查找

============================元组正向查找=========================
技术分享
1 1     # v3 = models.UserInfo.objects.all().values_list(‘name‘,‘age‘,‘ut__title‘)
2 2     # print(v3)
元组正向查找

f.元组反向查找

============================元组反向查找=========================
技术分享
1 1     # v4 = models.UserType.objects.all().values_list(‘title‘,‘userinfo__name‘)
2 2     # print(v4)
元组反向查找

 八、排序

1     # user_list = models.UserInfo.objects.all().order_by(‘-id‘)
2     # ##排序默认的升序,order_by(‘-id‘)是降序
3     # for i in user_list:
4     #     print(i.name,i.id)
5     # return HttpResponse(‘....‘)
技术分享
1  ss =models.UserInfo.objects.all().order_by(-id,age).reverse()
2  print(ss.query)
3 ‘‘‘
4  SELECT "appo1_userinfo"."id", "appo1_userinfo"."name", "appo1_userinfo"."age", "appo1_userinfo"."ut_id" FROM "appo1_userinfo" ORDER BY "appo1_userinfo"."id" ASC, "appo1_userinfo"."age" DESC
5 
6 ‘‘‘
7 
8 将设置的排序方式进行反转,本来id是降序,age是升序,反转后id 是升序,age是降序
排序 演示

 

九、annotate(组合)

def annotate(self,*args,**kwargs):
    #用于实现聚合group by查询
    from django.db.models import Count,Avg,Max,Min,Sum
     v = models.UserInfo.objects.values(‘ut_id‘).annotate(wsa=Count(‘ut_id‘))
    print(v.query)
‘‘‘
SELECT "appo1_userinfo"."ut_id", COUNT("appo1_userinfo"."ut_id") AS "uid" FROM "appo1_userinfo" GROUP BY "appo1_userinfo"."ut_id"

 ‘‘‘

十、转化成sql语句

v = models.UserInfo.objects.values(‘ut_id‘).annotate(wws=Count(‘ut_id‘)).filter(ut_id__gt=2)
 print(v.query)

SELECT "appo1_userinfo"."ut_id", COUNT("appo1_userinfo"."ut_id") AS "wws" FROM "appo1_userinfo" WHERE "appo1_userinfo"."ut_id" > 2 GROUP BY "appo1_userinfo"."ut_id"

十一、去重

 v= models.UserInfo.objects.values(‘ut_id‘).distinct()
#进行去重
 print(v.query)

 ‘‘‘
SELECT DISTINCT "appo1_userinfo"."ut_id" FROM "appo1_userinfo"
 ‘‘‘

#注:只有在PostgresSQL中才能使用distinct进行去重
#如果是PostgresSQL
# models.UserInfo.objects.distinct(‘nid‘)

十二、排除某列数据

# ss=models.UserInfo.objects.defer(‘age‘,‘ut_id‘)
# #映射中排除某列数据
# for i in ss:
#     print(i.id)

十三、仅获取某列数据

 # sss=models.UserInfo.objects.all().only(‘age‘)
 #仅取某列数据
 # for i in sss:
 #     print(i.age)

十四、指定使用某数据库

models.UserInfo.objects.using(‘dbx‘)
指定使用的数据库,参数为存放数据中的数据库名
ss=models.UserInfo.objects.raw(‘select * from appo1_userinfo‘)
print(ss)

  

python Django知识点总结