发布网友 发布时间:2024-09-29 04:00
共1个回答
热心网友 时间:2024-10-07 10:23
导读:本篇文章首席CTO笔记来给大家介绍有关django如何查询多个表的数据的相关内容,希望对大家有所帮助,一起来看看吧。
Django表关联对象及多表查询首先建立Student,Dpartment,Course,Stu_info表
一对多表关系数据的添加:
1.第一种方式就是跟之前的一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已经存在的值.
2.第二种方式是用的属性赋值的方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象的类型必须是department表的类实例对象
表关联对象的访问:
Student的模型类中我们有定义department的属性,所以当我们去访问的时候,可以直接通过student.department的形式去找到某个学生的所属学院是哪个.
那么如果我们也希望在在访问某个学院的实现对象的学生的时候改怎么访问呢???
表关联对象的访问:
可以在定义时设置related_name参数来覆盖foo_set的名称.
clear()从关联的对象集中删除所有的对象
多表查询----跨关联关系的查询:
Django提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:
它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。
Django如何多表联合统计查询
如果你觉着使用自带ORM查询费劲的话。直接获取数据库连接,然后执行sql语句。
defmy_custom_sql():fromdjango.dbimportconnection,transactioncursor=connection.cursor()#数据修改操作——提交要求cursor.execute("UPDATEbarSETfoo=1WHEREbaz=%s",[self.baz])transaction.commit_unless_managed()#数据检索操作,不需要提交cursor.execute("SELECTfooFROMbarWHEREbaz=%s",[self.baz])row=cursor.fetchone()returnrow
多数据
fromdjango.dbimportconnectionscursor=connections['my_db_alias'].cursor()#Yourcodehere...transaction.commit_unless_managed(using='my_db_alias')
通常我们不需要手动调用
transaction.commit_unless_managed(
),我们可以这样做:
@commit_on_successdefmy_custom_sql_view(request,value):fromdjango.dbimportconnection,transactioncursor=connection.cursor()#Datamodifyingoperationcursor.execute("UPDATEbarSETfoo=1WHEREbaz=%s",[value])#Sincewemodifieddata,markthetransactionasdirtytransaction.set_dirty()#Dataretrievaloperation.Thisdoesn'tdirtythetransaction,#sonocalltoset_dirty()isrequired.cursor.execute("SELECTfooFROMbarWHEREbaz=%s",[value])row=cursor.fetchone()returnrender_to_response('template.html',{'row':row})
Django怎么多表联合查询先让我们回忆一下在第五章里的关于书本(book)的数据模型:
1
fromdjango.dbimportmodels
classPublisher(models.Model):
name=models.CharField(max_length=30)
address=models.CharField(max_length=50)
city=models.CharField(max_length=60)
state_province=models.CharField(max_length=30)
country=models.CharField(max_length=50)
website=models.URLField()
def__unicode__(self):
returnself.name
classAuthor(models.Model):
first_name=models.CharField(max_length=30)
last_name=models.CharField(max_length=40)
email=models.EmailField()
def__unicode__(self):
returnu'%s%s'%(self.first_name,self.last_name)
classBook(models.Model):
title=models.CharField(max_length=100)
authors=models.ManyToManyField(Author)
publisher=models.ForeignKey(Publisher)
publication_date=models.DateField()
def__unicode__(self):
returnself.title
如我们在第5章的讲解,获取数据库对象的特定字段的值只需直接使用属性。例如,要确定ID为50的书本的标题,我们这样做:
frommysite.books.modelsimportBook
b=Book.objects.get(id=50)
b.title
u'TheDjangoBook'
但是,在之前有一件我们没提及到的是表现为ForeignKey或ManyToManyField的关联对象字段,它们的作用稍有不同。
访问外键(ForeignKey)值
当你获取一个ForeignKey字段时,你会得到相关的数据模型对象。例如:
b=Book.objects.get(id=50)
b.publisher
Publisher:ApressPublishing
b.publisher.website
结语:以上就是首席CTO笔记为大家整理的关于django如何查询多个表的数据的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django如何查询多个表的数据的相关内容别忘了在本站进行查找喔。