当前位置: 首页 > 网络应用技术

如何实现加入查询(Django查询)

时间:2023-03-09 12:23:41 网络应用技术

  简介:本文的首席执行官Note将介绍有关Django如何实现JOIN查询的相关内容。我希望这对每个人都会有所帮助。让我们来看看。

  如果您觉得自己使用自己的ORM来查询。直接获取数据库连接,然后执行SQL语句。

  def my_custom_sql():从django.db导入连接,transaction cursor = connect.cursor()#data修改操作-submit requiend cursor.execute.execute(“ update bar set foo = foo = 1 with with white baz raz])trassaction.commit_unless_managed()操作,无需提交cursor.execute(“从bar where where bar =%s”,[self.baz])行= cursor.fetchone()

  多-DATA

  来自django.db import connectionscursor = connections ['my_db_alias']。光标()#your代码... transaction.commit_unless_managed(use ='my_db_alias')

  通常我们不需要手动致电

  transaction.commit_unless_maned(

  ), 我们做得到:

  baz =%s“,[value])row = cursor.fetchone()return render_to_response('template.html',{'row':row':row})

  让我们的Django博客应用程序具有以下文章模型:

  Blog/models.pyclass帖子(Models.Model):

  # 标题

  title = models.charfield(max_length = 70)

  #正正

  body = model.textfield()

  #其他属性

  def __str __(self):

  返回self.title

  首先,请参见步骤1,用户在搜索框中输入搜索关键字,因此我们需要为博客上的用户提供搜索表格。HTML表单代码可能是这样的:

  形式方法=“ get” action =“/search/”

  {%csrf_token%}输入类型=“搜索”占位符=“搜索”需要

  按钮类型=“提交”搜索/按钮/表单

  特别是,在表单标签下有一个{%csrf_token%}。这是Django捍卫Cross -Site请求伪造(CSRF)攻击的一种机制。如果您不知道CSRF是什么,这没关系。请记住,使用Django时,您必须将{%csrf_token%}添加到前端表单代码。

  用户输入搜索关键字并单击搜索按钮后,将数据发送到Django背景服务器。表单的操作属性的值为 /搜索 /,表明用户提交的结果将发送到/search /this URL.我们绑定此URL的DJANGO视图函数,并在此视图函数中完成上一步2中提到的过程。支持我们在blog /views.py中编写视图函数的代码:

  blog/views.pydef搜索(请求):

  q = request.get.get('q')

  error_msg =''

  如果不是Q:

  error_msg ='请输入关键字'

  返回渲染(请求,'blog/errors.html',{'error_msg':error_msg})

  post_list = post.objects.filter(title__icontains = q)

  返回渲染(请求,'blog/results.html',{'error_msg':error_msg,

  'post_list':post_list})

  首先,我们使用request.get.get('q')获取用户提交的搜索关键字。用户通过表格Django提交的django存储在request.get中。这是一个类似于Python字典的对象,因此我们使用GET方法从字典中删除键Q的值,即用户的搜索关键字。此处的字典键称为,因为该字典的键是因为我们表格中输入框的名称属性为Q。如果修改了名称属性的值,则必须对此键的名称进行相应修改。

  接下来,我们进行了少量验证。如果用户在不输入搜索关键字的情况下提交表单,则我们不需要执行查询,而是渲染错误的页面来指示用户应输入关键字。

  如果用户输入搜索关键字,我们将通过过滤器方法从数据库中滤除所有合格的文章。此处的过滤条件是title__icontains = q,即关键字q包含(包含)关键字q,而前缀i表示,它没有区分情况。iContains是一个字段查找,用于与需要筛选的模型背后的两个下属线保持一致。Django有很多查询表达式。建议留下官方印象,以了解每个表达的角色。将来,您可以快速定位文档以查询文档的目的:现场查找

  下一步是渲染搜索结果页面,显示符合搜索条件的文章列表。以下是模板的简单示例:

  results.html

  {%如果error_msg%} p {{error_msg}/p {%endif%}

  {post_list%} div中的帖子

  在此处显示文章的相应信息 /div {%空%} div class =“ no-pos”

  没有合格的文章 /div {%endfor%}

  视图函数后,请记住将视图函数映射到相应的URL。通过我们的表单数据提交的URL为 /搜索 /,因此视图功能搜索被键入URL。

  blog/urls.pyurlpatterns = [

  #其他URL配置

  url(r'^search/$',views.search,name ='search'),]],]]

  更大的功绩!

  在上面的所有示例中,我们构造的过滤器仅将字段值与一定常数进行比较。如果我们想比较两个字段的值,我们该怎么办?

  Django提供了F()来进行此类比较。f()实例可以参考查询中的字段,以比较同一模型实例中两个不同字段的值。

  Django支持F()对象与F()对象和常数之间加法,减法,乘法和成型的操作。

  关键字参数查询(例如Filter()和其他方法是“和”的方法。如果您需要执行更复杂的查询(例如或语句),则可以使用Q对象。

  来自django.db.models导入Q

  Q(标题__startswith ='py')

  Q可以与|结合使用Q对象。操作符号。当操作员在两个Q对象上使用时,它会产生一个新的Q对象。

  查询名称称为水保证金或价格大于100的书

  您可以组合并|括号并使用括号进行分组来编写任何复杂的Q对象。在同一时间,可以使用Q对象?运算符被逆转,从而使组合可以正常查询和抗抗 - (非)查询:

  查询函数可以与Q对象和关键字参数混合。提供给查询函数的所有参数(关键字参数或Q对象)为“和”。但是,如果出现Q对象,则必须在所有关键字参数的前面。例如:

  查询名称,称为水利润,价格大于100

  选择 *从(从组中选择...从一个组中选择...(从B组中选择...)为B

  在哪里。class = b。

  如果将多个字段组合为主要键,请使用它进行连接。

  第一个构建学生,分区,课程,stu_info表

  添加一对多表的关系数据:

  1.第一种方法是将其添加为上一个方法。应该注意的是,外键的值必须是关联表中存在的存在。

  2.第二种方法是属性分配的方法,因为我们具有模型类中部门的属性,并且该属性的对象的类型必须是部门表类型的实例对象

  访谈与对象相关的对象:

  我们具有定义学生类别类别的部门的属性,因此,当我们访问它时,我们可以直接找到可以通过Student.Deppartment的形式直接找到学生附属学院的大学。

  那么,如果您拜访访问一所大学的学生时我们也想改变呢?

  访谈与对象相关的对象:

  您可以在定义期间设置相关的_name参数,以涵盖foo_set的名称。

  clear()将所有对象集中在关联对象

  多桌查询----交叉关系查询:

  Django提供了一种强大而直观的方式来“处理”查询中相关关系。它会自动帮助您处理后台加入。如果您想跨越关系,则只需要使用关联的模型字段的名称并使用双重字段的行进行分开,直到您想要的字段:

  它也可以反向起作用。要引用“反向”关系,您只需要使用模型的小写字母的名称即可。

  结论:以上是首席执行官的全部内容,请注意Django如何实现联接查询。感谢您阅读本网站的内容。我希望这对您有帮助。有关Django如何实现Join查询的相关内容的更多信息,请在此站点上找到它。