最初に関連する環境を設定するMySQLの接続ジャンゴを使用します
まず、構成データベース情報setting.py(現在MySQLでデータベースを作成する必要があります)
そのディレクトリsetting.pyで書かれ__init__.pyファイル
そして、あなたはappディレクトリのmodels.pyにDjangoのモデルクラスファイルを書き込むことができます
django.db インポートモデル #ここ壁紙あなたのモデルを作成します。 #モデルクラスの作成、1 #のクラス属性テーブル== ==フィールドのテーブルマッピングモデル クラスのユーザー(models.Model): 上記のid = models.AutoField(PRIMARY_KEY =真) #を主キー列からの成長、デフォルト 名= models.CharField(MAX_LENGTH = 30 ) 市 = models.CharField(= 30 MAX_LENGTHは、デフォルト= ' 北京' ) 年齢 = models.IntegerField(デフォルト= 18である) #2は、マップファイルを作成するには(移行) #Pythonのmanage.py makemigrations [appanme] #3、データベース(移行)に真にコミット地図データマッピングファイル # Pythonは[appnameの]移行manage.pyの デフ __str__ :(自己) リターン ' ID =%sの、名=%sを、市=%sの、年齢=%sの'、%(self.id、self.name、self.cityをself.age)
その後、クリック
次のコマンドライン入力で
makemigrations [APPNAME]これは、マッピングファイルを作成するために使用されます
入力
移行[APPNAME]この地図データはデータベースに送信されます
データベース内にこのようなテーブルは、確立されなければなりません
そして、あなたはCRUD操作を書くことができます
from django.shortcuts import render from django.http import HttpResponse # Create your views here. from .models import User def add(request): # # 方法一 # mr = User(name='xuning', city='beijing') # mr.save() # 保存提交 # 方法二 # mr = User() # mr.name = 'test1' # mr.city = 'chengdu' # mr.save() # 方法三 # User.objects.create(name='test2', city='辽宁') # User.objects.create(name='test3', city='铁岭') # 方法四 # User.objects.get_or_create(name='test4', city='北京') # 判断你有没有重复的数据 return HttpResponse('添加成功') def select(request): # 查询所有对象 # rs = User.objects.all() # print(rs[0]) # 查询单个对象 # rs = User.objects.get(city='长春') # 查询满足条件的对象 # rs = User.objects.filter(name='xuning' or 'test1') # return HttpResponse('查询成功') # 查询第一条数据 # rs = User.objects.first() # 查询最后一条数据 # rs = User.objects.last() # 查询不满足条件的 # rs = User.objects.exclude(name='test2') # 对于查询结果进行排序 # rs = User.objects.order_by('age') # 对于查询结果进行排序,反序 # rs = User.objects.order_by('-age') # 对于查询结果进行排序,多个 # rs = User.objects.order_by('age', 'id') # 对查询结果转换成字典 # rs = User.objects.all().values() # 对于查询总数进行计数 # rs = User.objects.all().count() # 查询条件 # 相当于等于 # rs = User.objects.filter(name__exact='test3') # 不区分大小写 # 包含,模糊查询 # rs = User.objects.filter(name__contains='test') # 以什么开头 # rs = User.objects.filter(name__istartswith='t') # 以什么结尾 # rs = User.objects.filter(name__iendswith='4') # 成员所属 # rs = User.objects.filter(age__in=[3, 18, 20]) # rs = User.objects.filter(id__in=[3, 4, 5]) # 大于 大于等于 小于 小于等于 # rs = User.objects.filter(age__lte=18) # 区间 # rs = User.objects.filter(age__range=(2, 18)) # 切片 rs = User.objects.all()[0:3] # rs = User.objects.filter(name__contains='tes') & User.objects.filter(id=2) return render(request, 'db_index.html', context={'rs': rs}) def update(request): # rs = Dog.objects.get(id=2) # print(rs) # rs.name = 'test' # rs.age = 20 # rs.save() # User.objects.filter(name='test1').update(city='长春') # User.objects.all().update(city='长春') # User.objects.filter(id=5).update(name='test5') # User.objects.filter(id=6).update(name='test6') # Dog.objects.filter(name='test1').update(age=30) # Course.objects.filter(c_id=1).update(c_name='python') return HttpResponse('修改成功') def delete(request): # User.objects.get(name='test').delete() # Student.objects.all().delete() # Stu_detail.objects.all().delete() # Department.objects.all().delete() # Course.objects.all().delete() return HttpResponse('删除成功')
变关系的实现(一对多, 一对一, 多对多)
先建立表模型
from django.db import models
class Department(models.Model): d_id = models.AutoField(primary_key=True) d_name = models.CharField(max_length=30) def __str__(self): return f'Department<d_id={self.d_id}, d_name={self.d_name}>' class Student(models.Model): s_id = models.AutoField(primary_key=True) s_name = models.CharField(max_length=30) department = models.ForeignKey('Department', on_delete=models.CASCADE, null=True) # 级联删除 # department = models.ForeignKey('Department', on_delete=models.SET_NULL, null=True) # 级联删除 # department = models.ForeignKey('Department', on_delete=models.PROTECT, null=True) # 级联删除 # course = models.ManyToManyField('Course') def __str__(self): return f'Student<s_id={self.s_id}, s_name={self.s_name}>' class Course(models.Model): c_id = models.AutoField(primary_key=True) c_name = models.CharField(max_length=30) student = models.ManyToManyField('Student') def __str__(self): return f'Course<c_id={self.c_id}, c_name={self.c_name}>' class Stu_detail(models.Model): # s_id = models.OneToOneField('Student', on_delete=models.CASCADE) student = models.OneToOneField('Student', on_delete=models.CASCADE) age = models.IntegerField() gender = models.BooleanField(default=1) city = models.CharField(max_length=30, null=True) def __str__(self): return f'Stu_detail<s_id={self.student}, age={self.age}, gender={self.gender}, city={self.city}>' # 级联删除 保证数据的完整性与一致性 # on_delete=models.CASCADE 删除主键同时删除外键数据 # on_delete=models.SET_NULL null=True 删除主键同时把外键设置为空 # on_delete=models.PROTECT 如果有外键正在引入主键, 那么主键不允许删除
之后对表关系进行操作
from django.shortcuts import render from django.http import HttpResponse # Create your views here. from .models import User, Department, Student, Course, Stu_detail def func2(request): # # 为学院表添加数据 # Department.objects.get_or_create(d_name='软件') # Department.objects.get_or_create(d_name='化学') # Department.objects.get_or_create(d_name='物理') # Department.objects.get_or_create(d_name='数学') # Department.objects.get_or_create(d_name='语言') # Department.objects.get_or_create(d_name='历史') # # 为学生添加数据 # Student.objects.get_or_create(s_name='test1', department_id=1) # Student.objects.get_or_create(s_name='test2', department_id=1) # Student.objects.get_or_create(s_name='test3', department_id=1) # Student.objects.get_or_create(s_name='test4', department_id=2) # Student.objects.get_or_create(s_name='test5', department_id=2) # Student.objects.get_or_create(s_name='test6', department_id=3) # Student.objects.get_or_create(s_name='test7', department_id=4) # Student.objects.get_or_create(s_name='test8', department_id=5) # Student.objects.get_or_create(s_name='test9', department_id=6) # # 为学生信息添加数据 # Stu_detail.objects.get_or_create(age=18, gender=1, city='上海', student_id=1) # Stu_detail.objects.get_or_create(age=17, gender=0, city='武汉', student_id=2) # Stu_detail.objects.get_or_create(age=18, gender=1, city='长沙', student_id=3) # Stu_detail.objects.get_or_create(age=19, gender=1, city='北京', student_id=4) # Stu_detail.objects.get_or_create(age=16, gender=1, city='长春', student_id=5) # Stu_detail.objects.get_or_create(age=17, gender=0, city='铁岭', student_id=6) # Stu_detail.objects.get_or_create(age=18, gender=1, city='南京', student_id=7) # Stu_detail.objects.get_or_create(age=16, gender=0, city='天津', student_id=8) # Stu_detail.objects.get_or_create(age=17, gender=1, city='西安', student_id=9) # # 为课程添加信息 # Course.objects.get_or_create(c_name='pyhton') # Course.objects.get_or_create(c_name='c++') # Course.objects.get_or_create(c_name='php') # Course.objects.get_or_create(c_name='java') # Course.objects.get_or_create(c_name='go') # Course.objects.get_or_create(c_name='r') # 一对多操作 d1 = Department.objects.get(d_id=1) d2 = Department.objects.get(d_id=2) d3 = Department.objects.get(d_id=3) s1 = Student.objects.get(s_id=1) s2 = Student.objects.get(s_id=2) s3 = Student.objects.get(s_id=3) s7 = Student.objects.get(s_id=7) # add方法 # 将学生s_id2添加到学院d_id2中 # d2.student_set.add(s2) # d1.student_set.add(s7) # create方法 # 新建学生test10,加入d_id1中 # d1.student_set.create(s_name='test10') # 查询 # print(s1.department.d_name) # print(s1.department.d_id) # print(d1.student_set.all()) # print(d1.student_set.filter(s_id=1)) # print(d1.student_set.get(s_id=3)) # 删除 # d1.student_set.remove(s3) # d2.student_set.clear() # 一对一操作 # stu = Stu_detail.objects.get(id=1) # print(stu.student.s_name) # print(s1.stu_detail.city) # 多对多操作 c1 = Course.objects.get(c_id=1) c2 = Course.objects.get(c_id=2) c3 = Course.objects.get(c_id=3) c4 = Course.objects.get(c_id=4) s6 = Student.objects.get(s_id=6) s7 = Student.objects.get(s_id=7) s8 = Student.objects.get(s_id=8) s9 = Student.objects.get(s_id=9) # 添加 # c1.student.add(s6, s7) # s8.course_set.add(c2, c4) # s9.course_set.add(c1, c3) # 查询 # print(s6.course_set.all()) # print(s7.course_set.get(c_id=1)) # print(c2.student.all()) # print(c3.student.get(s_id=9)) # 删除 # s6.course_set.remove(c1) # c4.student.clear() # c3.student.remove(s9) # 多表联查 # 查询报名了python的学生的学生信息 # rs = Stu_detail.objects.filter(student__course__c_name='python') # rs = Stu_detail.objects.filter(student__course__c_id=1) # 学生名字包含test1的学院信息 # rs = Department.objects.filter(student__s_name__contains='test') # 软件学院报名了python的学员的详细信息 # rs = Stu_detail.objects.filter(student__department__d_name='软件', student__course__c_name='python') # print(rs) return HttpResponse('执行成功')