1. 程式人生 > 其它 >Djiango 連線資料庫mysql 的基本資料操作

Djiango 連線資料庫mysql 的基本資料操作

1、單表操作

(1).增加操作

 1 # 增加操作
 2 def add_person(request):
 3     # 1.使用save() 方法
 4     # person_obj = models.Person()
 5     # person_obj.name = 'wanwu'
 6     # person_obj.age = 18
 7     # person_obj.gender = False
 8     # person_obj.address = 'shanghai'
 9     # person_obj.save()
10     # 2.使用create() 方法
11 # person_obj = models.Person.objects.create(name='lsi', age=20, gender=True, address='shenzhen') 12 # print(person_obj.id) 13 14 models.Goods.objects.create(name='蘋果', xl=1000, kc=2000) 15 models.Goods.objects.create(name='香蕉', xl=1000, kc=500) 16 models.Goods.objects.create(name='', xl=1000, kc=700)

(2).查詢操作

 1 def find_person(request):
 2     # 1.get() 返回值是一個具體物件。如果不存在則報錯!!!,返回多了也報錯
 3     # person_obj = models.Person.objects.get(id=2)
 4     # print(person_obj)
 5 
 6     # 2.first() 和last()方法 返回值是一個具體的物件。
 7     # ret = models.Person.objects.last()
 8     # print(ret)
 9     # 3.all() 返回一個QuerySet物件,類似於列表。
10 # person_obj_list = models.Person.objects.all() 11 # print(person_obj_list) 12 # # <QuerySet [<Person: Person object (1)>, <Person: Person object (2)>, <Person: Person object (3)>]> 13 # for person_obj in person_obj_list: 14 # print(person_obj.name) 15 # 4.filter() 16 # person_obj_list = models.Person.objects.filter(age=18) 17 # print(person_obj_list) # <QuerySet [<Person: Person object (1)>, <Person: Person object (3)>]> 18 # 多個條件之間使用並且的關係。 19 # ret = models.Person.objects.filter(age=18, name='zss') 20 # print(ret) 21 # 5.排序order_by() -id 表示降序。 22 # ret = models.Person.objects.all().order_by('-id') 23 # print(ret) 24 25 # 6.雙下劃線查詢 26 # ret = models.Person.objects.filter(age__gte=18) 27 # print(ret) 28 # ret = models.Person.objects.filter(name__startswith='z') 29 # print(ret) 30 31 # 7.聚合函式aggregate() 32 from django.db.models import Count, Max, Min, Sum, Avg, F, Q 33 # 求年齡的平均值 34 # ret = models.Person.objects.all().aggregate(Avg('age')) 35 # print(ret) # {'age__avg': 18.6667} 36 37 # 8.分組 annotate() 38 # 按性別來分組,求人數 39 # ret = models.Person.objects.all().values('gender').annotate(Count('gender')) 40 # print(ret) 41 # 9. F和Q查詢 42 # F 查詢:同一個模型類中,不同屬性進行比較。 43 # 查詢銷量(xl)大於庫存(kc)的商品 44 # ret = models.Goods.objects.filter(xl__gt=F('kc')) 45 # print(ret) 46 # Q查詢:可以實現複雜的查詢 not (~)、and (&)、or (|) 關係的使用。 47 # 查詢庫存大於1000 、或者銷量等1000的商品 48 # ret = models.Goods.objects.filter(Q(xl=1000) | Q(kc__gt=1000)) 49 # print(ret) 50 # ret = models.Goods.objects.all()[2] # 索引 51 # print(ret) 52 # ret = models.Goods.objects.all()[1:] # 切片 53 # print(ret) 54 return HttpResponse('find person...')

(3).修改操作

 1 def update_person(request):
 2     # 1.使用save()
 3     # person_obj = models.Person.objects.get(id=2)
 4     # person_obj.age = 23
 5     # person_obj.save()
 6     # 2. 使用update()方法,查詢出多個來統一修改
 7     ret = models.Person.objects.filter(name='lsi').update(age=22)
 8     print(ret)
 9 
10     return HttpResponse('update person...')

(4).刪除操作

# 刪除操作
def delete_person(request):
    person_obj = models.Person.objects.get(id=1)
    person_obj.delete()

    return HttpResponse('delete person...')

2、一對一操作

(1).模型類

 1 class User(models.Model):
 2     id = models.AutoField(primary_key=True)
 3     name = models.CharField(max_length=32)
 4     age = models.IntegerField(default=10)
 5 
 6 
 7 class IdCard(models.Model):
 8     id = models.AutoField(primary_key=True)
 9     address = models.TextField(default='beijing')
10     cardnum = models.CharField(max_length=32)  # 身份證號
11     # 一對一關聯
12     # to=User :關聯的表。on_delete:刪除策略。
13     # models.CASCADE:級聯刪除,刪除一的一方的時候,另外一方也刪除。
14     # related_name='card':表示反向查詢的時候使用屬性。如果不寫,反向查詢的時候預設值為類名小寫idcard
15     user = models.OneToOneField(to=User, on_delete=models.CASCADE, related_name='card')  # 在資料庫中會自動新增_id
16 
17  
18 
19  
20 
21  
22 
23 def one_add(request):
24     # user_obj = models.User()
25     # user_obj.name = 'zs'
26     # user_obj.age = 18
27     # user_obj.save()
28     # idcard_obj = models.IdCard()
29     # idcard_obj.cardnum = '131126333'
30     # idcard_obj.address = 'beijing'
31     # idcard_obj.user = user_obj  # 設定關係--> 賦值物件
32     # idcard_obj.save()
33 
34     user_obj = models.User()
35     user_obj.name = 'lsi'
36     user_obj.age = 20
37     user_obj.save()
38 
39     idcard_obj = models.IdCard()
40     idcard_obj.cardnum = '131126444'
41     idcard_obj.address = 'shangai'
42     idcard_obj.user_id = user_obj.id  # 設定關係--> 賦值id
43     idcard_obj.save()
44 
45     return HttpResponse('one add...')
46 
47 
48 # 查詢
49 
50 def one_find(request):
51     # 正向查詢
52     # 1.查詢id 為1 的身份證對應的人。
53     # card_obj = models.IdCard.objects.get(id=1)
54     # user_obj = card_obj.user  # 通過關係屬性獲取物件
55     # print(user_obj, user_obj.name)  # User object (1)
56 
57     # 反向查詢
58     # 2.查詢zs 對應的身份證物件
59     user_obj = models.User.objects.filter(name='zs').first()
60     # card_obj = user_obj.idcard  # 類名小寫,直接獲取到物件。
61     card_obj = user_obj.card  # 使用的related_name屬性的值。
62     print(card_obj)
63     return HttpResponse('one find...')
64 
65 
66 def one_delete(request):
67     # 刪除zs
68     user_obj = models.User.objects.get(id=1)
69     user_obj.delete()  # 級聯刪除身份證
70     return HttpResponse('one delete...')

3、一對多操作

 1 # 部門表
 2 class Dept(models.Model):
 3     id = models.AutoField(primary_key=True)
 4     name = models.CharField(max_length=32)
 5 
 6 
 7 class Employee(models.Model):
 8     id = models.AutoField(primary_key=True)
 9     name = models.CharField(max_length=32)
10     # 設定外來鍵
11     dpet = models.ForeignKey(to=Dept, on_delete=models.CASCADE, related_name='emps')
12 
13  
14 
15  
16 
17 # 一對多操作
18 
19 def onetomany_add(request):
20     dept_obj = models.Dept.objects.create(name='市場部')
21     emp_obj = models.Employee()
22     emp_obj.name = 'lsi'
23     emp_obj.dpet = dept_obj  # 賦值物件即可
24     emp_obj.save()
25 
26     emp_obj1 = models.Employee()
27     emp_obj1.name = 'ww'
28     emp_obj1.dpet = dept_obj
29     emp_obj1.save()
30 
31     emp_obj2 = models.Employee()
32     emp_obj2.name = 'zl'
33     emp_obj2.dpet = dept_obj
34     emp_obj2.save()
35 
36     return HttpResponse('onetomany_add...')
37 
38 
39 # 查詢
40 
41 def onetomany_find(request):
42     # 正向查詢
43     # 1.查詢lsi 對應的部門
44     # emp_obj = models.Employee.objects.filter(name='lsi').first()
45     # print(emp_obj.dpet)  # 獲取部門物件
46 
47     # 反向查詢
48     # 2.查詢市場部對應的所有員工
49     dept_obj = models.Dept.objects.get(name='市場部')
50     # ret = dept_obj.employee_set.all()  # 使用類名小寫_set.方法()
51     ret = dept_obj.emps.all()  # 設定查詢名稱
52     print(ret)
53 
54     return HttpResponse('onetomany_find...')
55 
56 
57 # 刪除
58 def onetomany_delete(request):
59     # 1.刪除lsi
60     # emp_obj = models.Employee.objects.filter(name='lsi').first()
61     # emp_obj.delete()
62 
63     # 2.刪除市場部,會級聯刪除對應的員工。
64     dept_obj = models.Dept.objects.get(name='市場部')
65     dept_obj.delete()
66 
67     return HttpResponse('onetomany_delete...')

4、多對多操作

 1 class Teacher(models.Model):
 2     id = models.AutoField(primary_key=True)
 3     name = models.CharField(max_length=32)
 4     salary = models.IntegerField(default=1000)
 5 
 6 
 7 class Student(models.Model):
 8     id = models.AutoField(primary_key=True)
 9     name = models.CharField(max_length=32)
10     age = models.IntegerField(default=20)
11     # 多對多關係
12     teachers = models.ManyToManyField(to=Teacher)
13 
14  
15 
16  
17 
18 def many_add(request):
19     std_obj1 = models.Student()
20     std_obj1.name = 'zs'
21     std_obj1.age = 10
22     std_obj1.save()
23     std_obj2 = models.Student()
24     std_obj2.name = 'sli'
25     std_obj2.save()
26 
27     tea_obj = models.Teacher()
28     tea_obj.name = 'laowang'
29     tea_obj.save()
30 
31     tea_obj1 = models.Teacher()
32     tea_obj1.name = 'laoli'
33     tea_obj1.save()
34     # 設定關係
35     std_obj1.teachers.add(tea_obj, tea_obj1)
36     std_obj2.teachers.add(tea_obj, tea_obj1)
37 
38     return HttpResponse('many to many add...')
39 
40 
41 def many_find(request):
42     # 1.zs 被哪些老師教過
43     # std_obj = models.Student.objects.get(name='zs')
44     # ret = std_obj.teachers.all()
45     # print(ret)
46 
47     # 2.laowang 教過哪些學生
48     tea_obj = models.Teacher.objects.get(name='laowang')
49     ret = tea_obj.student_set.all()  # 類名小寫_set.方法名稱()
50     print(ret)
51     return HttpResponse('many to many find...')