请求构建器

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

🧩 查询构建器

🧩 查询构建器

前言

查询构建器是用于构建查询以供以后执行的类。例如,如果您需要查询 where,可以将它们链接这个QueryBuilder类上。然后修改该类,直到您想要执行查询。模型在后台使用查询构建器进行所有这些调用。许多模型方法实际上都返回QueryBuilder的实例,因此您可以继续将复杂的查询链接在一起。

直接使用查询构建器类可让您无需使用模型即可进行数据库调用。

获取QueryBuilder类

要获取查询构建器类,只需导入查询构建器即可。导入后,您将需要传递您存储在config.database文件中的connection_details字典:

from masonite.orm.builder import QueryBuilder
from config.database import CONNECTIONS

builder = QueryBuilder(connection_details=CONNECTIONS)

然后,您可以开始进行任意数量的数据库调用。

获取记录

Select

builder.table('users').select('username').get()
# SELECT `username` from `users`

首先

您可以轻松获得第一条记录:

builder.table('users').first()
# SELECT `username` from `users`

所有记录

您也可以简单地从表中获取所有记录:

builder.table('users').all()

Get方法

每当需要获取记录时,都可以调用get()方法,而不是all()方法。

例如,这是正确的:

builder.table('users').select('username').get()

这是错误的:

builder.table('users').select('username').all()

Wheres

您还可以指定以下任何 where 语句:

最简单的一个是「等于」语句。这是一个查询,用于获取用户名等于Joeage等于18的位置:

builder.table('users').where('username', 'Joe').where('age', 18).get()

您还可以指定比较运算符:

builder.table('users').where('age', '=', 18).get()
builder.table('users').where('age', '>', 18).get()
builder.table('users').where('age', '<', 18).get()
builder.table('users').where('age', '>=', 18).get()
builder.table('users').where('age', '<=', 18).get()

Where Null

另一个常见的 where 子句是检查值是否为NULL的记录:

builder.table('users').where_null('admin').get()

这将获取 admin 列为NULL的所有记录。

或相反:

builder.table('users').where_not_null('admin').get()

这将查询 admin 为NOT NULL的所有列。

Where In

为了获取某个列表中的所有记录,我们可以传入一个列表:

builder.table('users').where_in('age', [18,21,25]).get()

这将获取所有年龄为182125的记录。

Limits / Offsets

Limit 或 Offset 查询也非常简单。

Limit 示例:

builder.table('users').limit(10).get()

Offset 示例:

builder.table('users').offset(10).get()

同时使用两者的示例:

builder.table('users').limit(10).offset(10).get()

Between

您可能需要获取所有记录,其中列值介于2个值之间:

builder.table('users').where_between('age', 18, 21).get()

Group By

您可能要按特定的列分组:

builder.table('users').group_by('active').get()

Having

Having 子句通常在 group by 中使用。例如,返回按 salary 分组的所有用户(其中 salary 大于 0):

builder.table('users').sum('salary').group_by('salary').having('salary').get()

也可以指定相同的查询,但其中 salary 总和大于 50,000

builder.table('users').sum('salary').group_by('salary').having('salary', 50000).get()

Inner Joining

内部联接是一种从相关表中获取数据并将其返回到 1 个结果集中的方法,还可以筛选出与联接表无关的任何内容。

builder.table('users').join('table1', 'table2.id', '=', 'table1.table_id')

此联接将创建内部联接。

您还可以选择左联接(Left Join):

Left Join

builder.table('users').left_join('table1', 'table2.id', '=', 'table1.table_id')

和右联接(Right Join):

Right Join

builder.table('users').right_join('table1', 'table2.id', '=', 'table1.table_id')

Increment

有时候,您实际上只需要增加一列,而无需提取任何其他信息。许多增量(Increment)逻辑被隐藏了:

builder.table('users').increment('status')

减量(Decrement)也很相似:

Decrement

builder.table('users').decrement('status')

Aggregates

您可以使用几种聚合(Aggregates)方法来汇总列:

Sum

builder.table('users').sum('salary').get()

Average

builder.table('users').avg('salary').get()

Count

builder.table('users').count('salary').get()

Max

builder.table('users').max('salary').get()

Min

builder.table('users').min('salary').get()

Raw Queries

如果某些查询可以用 raw 形式编写,则可以更轻松地对 select 和 wheres 进行查询:

builder.table('users').select_raw("COUNT(`username`) as username").where_raw("`username` = 'Joe'").get()

获取 SQL

如果要查看执行命令时运行的 SQL。您可以使用to_sql()。此方法返回查询语句,而不会查询数据。发送到数据库的查询是「qmark 查询」。to_sql()方法的目的主要用于调试。

有关 qmark 查询的更多信息,请参见下面的部分。

builder.table('users').count('salary').to_sql()
#== SELECT COUNT(`users`.`salary`) FROM `users`

获取 Qmark

Qmark 本质上只是一个普通的 SQL 语句,只是查询被问号代替。应该放在问号位置的值存储在元组中,并与 qmark 查询一起发送,以帮助 SQL 进行注入。 qmark 查询是使用连接类发送的实际查询。

builder.table('users').count('salary').where('age', 18).to_sql()
#== SELECT COUNT(`users`.`salary`) FROM `users` WHERE `users`.`age` = '?'

Updates

更新记录

您可以更新许多记录。

builder.where('active', 0).update({
    'active': 1
})
# UPDATE `users` SET `users`.`active` = 1 where `users`.`active` = 0

您也可以更新一条记录。

Deletes

删除记录

您也可以删除许多记录。例如,删除所有 active 设置为 0 的记录。

builder.where('active', 0).delete()

可用方法

开发中

  • where
  • where_has
  • first
  • update
  • create
  • set_scope
  • set_global_scope
  • select
  • select_raw
  • create
  • delete
  • where
  • where_raw
  • or_where[str, int, callable])
  • where_exists"QueryBuilder"]):
  • having
  • where_null
  • where_not_null
  • between
  • not_between
  • where_in
  • where_not_in
  • join
  • left_join
  • right_join
  • where_column
  • limit
  • offset
  • update
  • increment
  • decrement
  • sum
  • count
  • max
  • order_by
  • group_by
  • aggregate
  • first
  • all
  • get
  • get_grammar
  • to_sql
  • to_qmark
  • new

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/2.3/ma...

译文地址:https://learnku.com/docs/masonite/2.3/ma...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~