ホワイト学習ジャンゴ第四の脚 - リレーショナルデータベース

最初に関連する環境を設定する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('执行成功')

 

おすすめ

転載: www.cnblogs.com/xnnx/p/11295049.html
おすすめ