Django ORM基本操作: # 1.增刪改查 create、delete、update、all、filter # 2. 一般: #id>1 models.UserInfo.objects.filter(id__gt=1) #id>=1 models.UserInfo.objects.filter(id__gte=1) #id<1 models.UserInfo.objects.filter(id__lt=1) #id<=1 models.UserInfo.objects.filter(id__lte=1) #id in [1,2,3] models.UserInfo.objects.filter(id__in=[1,2,3]) #id in [1,2] ,切片,要頭不要尾 models.UserInfo.objects.filter(id__range=[1,3]) #以什么開頭 models.UserInfo.objects.filter(name__startswith='xxxx') #包含 models.UserInfo.objects.filter(name__contains='xxxx') #不包括id=1 models.UserInfo.objects.exclude(id=1) # 3. 排序 #正序 user_list = models.UserInfo.objects.all().order_by('id') #反序,當id一樣的情況下,name正序排序 user_list = models.UserInfo.objects.all().order_by('-id','name') # 4. 分組 from django.db.models import Count,Sum,Max,Min #以ut_id為組,查詢ut_id和組內id個數。(簡記:以部門為組,查詢部門的id和有多少人) #v.query是打印出sql語句 v =models.UserInfo.objects.values('ut_id').annotate(xxxx=Count('id')) print(v.query)#select ut_id,count(id) as xxxx from UserInfo group_by ut_id v =models.UserInfo.objects.values('ut_id').annotate(xxxx=Count('id')).filter(xxxx__gt=2) print(v.query) v =models.UserInfo.objects.filter(id__gt=2).values('ut_id').annotate(xxxx=Count('id')).filter(xxxx__gt=2) print(v.query) # 5. F,更新時用於獲取原來的值,原來的age都加1 from django.db.models import F models.UserInfo.objects.all().update(age=F("age")+1) # 6. Q,用於構造復雜查詢條件 # 應用一: from django.db.models import Q #id>1 models.UserInfo.objects.filter(Q(id__gt=1)) #id=8 或 id=2 models.UserInfo.objects.filter(Q(id=8) | Q(id=2)) #id=8 和 id=2 models.UserInfo.objects.filter(Q(id=8) & Q(id=2)) # 應用二: q1 = Q() q1.connector = 'OR' q1.children.append(('id__gt', 1)) q1.children.append(('id', 10)) q1.children.append(('id', 9)) q2 = Q() q2.connector = 'OR' q2.children.append(('c1', 1)) q2.children.append(('c1', 10)) q2.children.append(('c1', 9)) q3 = Q() q3.connector = 'AND' q3.children.append(('id', 1)) q3.children.append(('id', 2)) q1.add(q3,'OR') con = Q() con.add(q1, 'AND') con.add(q2, 'AND') models.UserInfo.objects.filter(con) (id>1 or id=10 or id=9 or (id=1 and id=2)) and (c1=1 or c1=10 or c1=9) # 7. extra, 額外查詢條件以及相關表,排序 models.UserInfo.objects.extra(self, select=None, where=None, params=None, tables=None, order_by=None, select_params=None) # a. 映射 # select # select_params=None # select 此處 from 表 # b. 條件 # where=None # params=None, # select * from 表 where 此處 # c. 表 # tables # select * from 表,此處 # d. 排序 # order_by=None # select * from 表 order by 此處 models.UserInfo.objects.extra( select={'newid':'select count(1) from app01_usertype where id>%s'}, select_params=[1,], where = ['age>%s'], params=[18,], order_by=['-age'], tables=['app01_usertype'] ) #相當於 """ select app01_userinfo.id, (select count(1) from app01_usertype where id>1) as newid from app01_userinfo,app01_usertype where app01_userinfo.age > 18 order by app01_userinfo.age desc """ # 8. 原生SQL語句,記得在settings.py中設置好DATABASES,
和在__init__.py中把MySQLdb修改為通過pymysql模塊來連接數據庫。
有個問題:結果是元組,無法在模板里面進行類似row.id這樣的替換,
這種替換是需要字典或者字典列表才可以進行的,而且
cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)報錯,
所以無法獲取字典或者字典列表這樣的結果。
from django.db import connection, connections cursor = connection.cursor() # connection是默認數據庫 cursor = connections['db2'].cursor()#指定數據庫 cursor.execute("""SELECT * from auth_user where id = %s""", [1]) row = cursor.fetchone()#結果是元組:(k,v) row_list = cursor.fetchall()#結果是元組((k1,v1),(k2,v2)) # 9. 其他操作 http://www.cnblogs.com/wupeiqi/articles/6216618.html