python Django知識點總結
阿新 • • 發佈:2017-07-01
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知識點總結