本文主要描述Django数据中一对一的数据关系,创建app等配置不再赘述。
Django操作数据库,使用ORM
ORM:关系映射对象,把传统的SQL语句封装成了类和对象的形式,在操作表中的记录时,就像在操作类和对象一样。
使用默认数据库:sqlite
操作在models.py文件中完成。
一对多数据关系:
一对多关系是通过‘子表’中设置‘父表’的外键约束来完成关联
父表的一个数据对应子表中的多个数据
举例:班级和学生
class Classes(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=10, null=True) # 班级名称 num = models.IntegerField(null=True) # 班级人数 class Meta: db_table = 'Classes' def __unicode__(self): return 'classname:%s | classnum:%s' % (self.name, self.num) class Student(models.Model): id = models.AutoField(primary_key=True) # 关联‘父表’,设置外键 classes = models.ForeignKey(Classes, on_delete=models.CASCADE) name = models.CharField(max_length=20, null=True) age = models.IntegerField(null=True) class Meta: db_table = 'Student' def __unicode__(self): return 'studentname:%s | studentage:%s' % (self.name, self.age)
创建完数据库模型之后,我们要创建数据库变更文件以及应用表更文件等操作,具体操作步骤,参考上篇文章《Django数据库一对一数据关系》
对数据表中数据的查询操作
1)从子表中查询父表的数据
print s1.classes.num 学生在所在班级的总人数
print s1.classes 学生所在班级的所有信息
2)从父表中查询子表的相关数据
1. 查询一个班级的所有学生,通过student_set属性查询
print c1.student_set.all()
2.filter:根据条件,去结果集中进行匹配查询
print c1.student_set.filter(name='lisi')
3. get :根据条件,去结果集中进行匹配查询
print c1.student_set.get(name='lisi')
get()和filter()方法的区别
get():只能查询出一个结果,如果查询的结果不止一个,name使用get()方法会报错
filter():可以根据条件,匹配一组结果,得到一个结果集
XXX.set :Django提供的用于通过主模型(父表)对象访问子模型(子表)对象集合的属性名。