1. 程式人生 > >python Django知識點總結

python Django知識點總結

als 數據行 刪除命令 年齡 cdb resp 之前 false word

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知識點總結