django如何用mysql数据库查询数据库_Mysql数据库使用(Django),mysql,用法,django

一对多:

多方定义外键!!

# 学生模型类

class Student(AbstractUser):

mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')

cid = models.ForeignKey(to="Class", to_field="id")

class Meta:

db_table = 'tb_student'

verbose_name = '用户'

verbose_name_plural = verbose_name

# 班级模型类

class Class(models.Model):

id = models.AutoField(primary_key=True)

cname = models.CharField(max_length=32)

cdata = models.DateField()

在django中实现多对一的

指定

时,用法如下:

st = Student(

username=student_name,

password=password,

cid=cl # cl为Class类的实例

)

在进行

查找

时:

# 一对多/多对一

cl = Banji.objects.get(id=3)

tea = cl.student_set.all()[0]

print(tea)

print(cl.student_set.first())

st = Student.objects.get(username='fenghua')

print(st.cid_id)

print(st.cid.cname)

关联查询

1.正向查找(多查1):

通过模型类的外键(这里是cid)获取

st.cid_id    查找学生对应的班级id     模型中多方定义外键时有字段to_field=id

st.cid.cname       查找学生对应的班级名称

2.反向查找(1查多):

如果不在外键的字段中设置related_name的话,默认就用多方模型小写_set。

如果设置了related_name=”students”,反向查询时可直接使用students进行反向查询

cl(假设时班级对象)

cl.模型名小写_set.first()

cl.students.first()

内连接查询

由多模型类条件查询一模型类数据

:

语法如下:

关联模型类名小写__属性名__条件运算符=值

注意:如果没有"__运算符"部分,表示等于。

例:

查询班级,要求学生为"XX"

Class.objects.filter(student__username=

'XX'

)

查询班级,要求班级中学生的名字包含"X"X

Class.objects.filter(student__username__contains=

'X'

)

由一模型类条件查询多模型类数据

:

(

外键

用外键作为条件

)

语法如下:

外键

__一模型类属性名__条件运算符=值

注意:如果没有"__运算符"部分,表示等于。

例:

查询班级为“XX”的所有学生。

Student.objects.filter(

cid

__cname=

'天龙八部'

)

查询班级人数大于30的所有学生

Student.objects.filter(

cid

__cnum__gt=

30

)

多对多查找

多对多操作

正向查询(由老师表查询班级表)

# 班级模型类

class Banji(models.Model):

id = models.AutoField(primary_key=True)

cname = models.CharField(max_length=32)

cdata = models.DateField()

cnum = models.IntegerField()

def __str__(self):

return "%s" % [self.__class__, self.cname]

class Meta:

db_table = 'tb_banji'

verbose_name = '班级'

verbose_name_plural = verbose_name

# 老师模型类

class Teacher(models.Model):

id = models.AutoField(primary_key=True)

tname = models.CharField(max_length=32)

cid = models.ManyToManyField(to="Banji", name="teacher")

class Meta:

db_table = 'tb_teacher'

verbose_name = '老师'

verbose_name_plural = verbose_name

# 多对多

te = Teacher.objects.get(id=4)

cl1 = te.teacher.all()[0]

cl2 = te.teacher.all()[1]

print(cl1.cname)

print(cl2.cname)

cl = Banji.objects.get(id=3)

te1 = cl.teacher_set.all()[0]

te2 = cl.teacher_set.all()[1]

print(te1.tname)

print(te2.tname)

查出老师模型类对象.多对多的键(这里是cid).all()

te.cid.all()

te.teacher.all()

teacher是cid设置的name属性,用于对接查找班级

反向查询(由班级表反向查询老师表)

班级模型类对象.老师模型类小写_set

cl.teacher

_set

.all()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值