ecto库
>本文快速查看ECTO库的主要方面。虽然它是为ECTO 1.X编写的,但本文中的示例与ECTO 2兼容,并且在差异所在的位置,则提到了它们。假定长生不老药和混合的基本知识。
钥匙要点
> ecto是用于处理数据库操作的长生不老药中的一个强大库,为数据库交互,版本控制和数据处理提供了通用的API。
- >
- 设置过程涉及创建一个新的混合应用程序,配置依赖项并将ECTO存储库模块集成到应用程序的监督树中以进行有效的数据库管理。 > ecto的迁移功能允许在应用程序代码旁边对数据库进行版本处理,从而促进更改跟踪和应用不同数据库状态的应用。
- > ECTO模式和更改集对于定义数据结构和处理数据验证至关重要,确保仅操纵和存储有效的数据。 >本文演示了使用eTo构建一个简单的CRUD应用程序,说明了如何执行数据库操作,例如创建,阅读,更新和删除记录。
- >
- 应用程序
- >我们将构建一个非常简单的应用程序,可以为我们存储并检索笔记。通过这样做,我们将浏览ECTO的四个主要组件中的每个组件:存储架,模式,更改和查询。
让我们从生成新的混合应用程序开始:
-SUP标志生成了一些OTP应用程序所需的其他样板代码。此应用程序需要具有监督树,因为Ecto需要它(一分钟内详细介绍)。
设置依赖项现在,让我们使用一些应用程序依赖项更新Mix.exs文件。为此,我们将要指定ECTO及其适配器之一。我选择为此使用MySQL,因此我们需要指定Mariaex库(ECTO支持许多数据库)。
mix new notex <span>--sup </span>
>在mix.exs文件中更新应用程序/0函数,并使用以下内容:
和更新DEPS/0,以下内容:
>现在,用混合deps.get获取依赖项。
接下来,我们需要将这些依赖项集成到我们的应用程序中。这将涉及为ECTO存储库创建一个新的包装器模块,更新应用程序的监督树以启动和监督该新模块,并配置适配器的连接信息。
让我们首先从lib/notex/repo.ex上定义一个notex.repo模块,并使用以下代码:
mix new notex <span>--sup </span>
>常规的该模块(lib/app_name/repo.ex)的位置。每当我们使用Mix ecto命令时,都会默认在AppName.Repo上查找定义的存储库。我们可以将其放置在其他地方,但这将是不便之处,即必须使用-r(或 - repo)标志来指定其位置。
>>上述notex.repo模块使我们能够使用eTeco使用数据库。它通过首先从ECTO的repo模块(提供数据库查询API)注入功能,然后通过将我们的OTP应用程序命名为:Notex。
> ecto存储库为我们提供了一个通用接口,可以与基础数据库进行交互(这是由所使用的适配器决定的)。因此,尽管Ecto使用了术语回购,但它不遵循存储库设计模式,因为它是数据库周围的包装器,而不是表格。>。
>现在我们已经定义了notex.repo模块,我们现在必须将其添加到Notex模块中的监督树(lib/notex.ex)。使用以下内容更新开始/2函数:
<span>def <span>application</span> do </span> <span>[applications: [:logger, :ecto, :mariaex], </span> <span>mod: {Notex, []}] </span><span>end </span>
使用ECTO创建的每个连接都使用单独的过程(其中使用称为Poolboy的库从过程池中拉出该过程)。这样做是为了使我们的查询可以同时执行,并且可以从故障(例如超时)中获得弹性。因此,我们的应用程序需要OTP,因为ECTO具有自己的过程需要监督的过程(包括监督树监督数据库连接池)。可以使用Erlang的Observer库可以看出这一点,这使我们能够可视化应用程序中的过程。将存储库添加到要监督的工作流程中后,我们需要最后配置适配器,以便它可以与数据库进行通信。将以下代码放在`config/config.exs`文件的末尾(根据需要更新详细信息):
mix new notex <span>--sup </span>
> ecto实际上为我们提供了一个快捷方式,用于设置上述存储库模块作为混合任务:mix ecto.gen.repo。这为我们生成了存储库模块,并使用一些基本配置更新了config.exs文件(虽然仍需要手动添加回购模块)。我避免在此处使用它,主要是出于教学原因是显示如何手动设置ECTO(这是回购生成器假设您使用Postgres的事实,因此我们必须在配置中更新适配器)。
继续前进,让我们快速了解过程层次结构。 (请注意,如果您正在运行ECTO 2,则首先需要使用Mix ecto.创建数据库。
<span>def <span>application</span> do </span> <span>[applications: [:logger, :ecto, :mariaex], </span> <span>mod: {Notex, []}] </span><span>end </span>
>
创建数据库和表现在,使用该设置,我们可以创建我们的数据库和表。要创建数据库,请运行以下命令:
为了创建表,我们将使用ECTO的迁移功能。迁移使我们能够与源代码一起版本版本,从而可以跟踪更改并应用不同的状态。因此,只要我们想更改数据库的结构。
defp deps <span>do </span> <span>[{:ecto, <span>"~> 1.1.5"</span>}, # or "~> 2.0" for Ecto 2 </span> <span>{:mariaex, <span>"~> 0.6.0"</span>}] # or "~> 0.7.0" for Ecto 2 </span><span>end </span>
>以上应在Priv/Repo/Migrations以及一个新的迁移文件中创建一个新的迁移文件夹。此文件以创建的日期和时间(用于简单目录订购)以及我们的迁移名称前缀。打开该文件并将其修改为以下内容:
mix new notex <span>--sup </span>
>保持简单,我们使用创建宏来定义一个带有两个字段的新表(称为注释):note_name和note_content。主键是为我们创建的(命名ID)。尽管我们的两个字段都被定义为简单的字符串,但ECTO支持多种类型 - 您可以在其文档中查看。
>我们的迁移完成后,我们现在可以使用以下命令运行迁移:
<span>def <span>application</span> do </span> <span>[applications: [:logger, :ecto, :mariaex], </span> <span>mod: {Notex, []}] </span><span>end </span>
>创建了表,现在该为表创建模型了。该模型用于定义表及其各自类型的字段。这些应用程序将在施放和验证数据时通过应用程序和ECTO的查询DSL使用。模型定义也可能包含虚拟字段(与迁移定义不同),这些字段通常用于持有我们不想持续存在的短暂数据(例如未经解决的密码)。
>>以其最基本的形式,我们的notex.note模型(位于lib/notex/note.ex)看起来如下:
>>我们注入ecto.schema模块,以便我们可以使用模式宏来定义字段及其类型。当我们使用ECTO的更改集时,这些定义将在稍后变得重要。模式宏对我们所做的其他事情是将类型的结构定义为当前模块(在这种情况下,是%notex.note.note {})。该结构将使我们能够创建新的更改(更快详细介绍)并将数据插入表中。
defp deps <span>do </span> <span>[{:ecto, <span>"~> 1.1.5"</span>}, # or "~> 2.0" for Ecto 2 </span> <span>{:mariaex, <span>"~> 0.6.0"</span>}] # or "~> 0.7.0" for Ecto 2 </span><span>end </span>
(删除的控制台调试信息。)
> 导入
ecto的查询模块,以使我们在Shell中使用的所有查询DSL宏(例如来自来自的)。然后,我们创建一个简单的查询以返回所有记录(使用全/1),仅选择Note_name字段。这将返回一个空列表,因为我们目前在数据库中没有记录。让我们创建一个新的更改集并将其插入表格:defmodule Notex<span>.Repo do </span> use Ecto<span>.Repo, otp_app: :notex </span><span>end </span>
(删除的控制台调试信息。)
>
我们从再次导入ecto.Query开始,这是最后一次获取操作所需的(特别是从宏中出发)。然后,我们使用从ecto.changeset的更改/1函数使用%notex.note {} struct创建一个新更改。然后插入此更改,然后检索。<span>def <span>start</span>(_type, _args) do </span> import Supervisor<span>.Spec, warn: false </span> children <span>= [ </span> supervisor<span>(Notex.Repo, []), </span> <span>] </span> opts <span>= [strategy: :one_for_one, name: Notex.Supervisor] </span> Supervisor<span>.start_link(children, opts) </span><span>end </span>
>让我们更新notex.note模型以演示某些更改和查询操作,因为在IEX中执行这些更改和查询操作有点混乱:
>mix new notex <span>--sup </span>
>让我们浏览五个新功能中的每个功能。 insert_note/1函数为我们创建了一个新注释。 CAST/4函数将数据从输入字段铸造到其各自的字段类型(根据我们的模式定义),并确保所有必需的字段都具有值。然后将从Cast/4返回的更改插入数据库中。请注意,在ECTO 2中,应使用Cast/3和Validate_required/3功能代替cast/4。
get_notes/0功能返回表中所有注释的元组列表。这是通过选择语句中的模式匹配来完成的。 (例如,我们很容易返回一个地图列表,例如:%{id:n.id,note_name:n.note_name}。)get_note/1函数根据注释ID从表中检索单个注释。这是通过Get完成的!功能,要么在成功时返回注释,要么在失败时投掷。
>>有上述CRUD操作,让我们跳回IEX并尝试一下:
(删除的控制台调试信息。)
>>我们有了它,是使用ecto的基本CRUD应用程序!我们可以渲染输出并使API更好地查询,但是我将其作为扩展名,因为这些内容与我们所涵盖的内容相切(而且本文已经足够长,我认为)。
结论<span>def <span>application</span> do </span> <span>[applications: [:logger, :ecto, :mariaex], </span> <span>mod: {Notex, []}] </span><span>end </span>
>本文通过从头开始创建一个简单的CRUD应用程序来研究ECTO的基本面。我们已经看到了许多能力ecto包来管理记录和数据库更改,包括迁移,模式及其查询DSL,以及涉及切向主题(例如OTP)。我希望这是那些希望加速使用Elixir中的数据库的人!在下一篇文章中,我介绍了Elixir的Ecto查询DSL的基础知识。
经常询问有关Elixir的Ecto库
的问题(常见问题解答)>> ecto如何处理数据验证?
。更改是一个数据结构,可将数据库进行更改,以及错误,验证和类型铸造信息。更改集可确保仅将有效数据保存到数据库中,从而为数据验证和错误处理提供了可靠的机制。>
>我如何使用eTOTO执行复杂的查询?这使您可以以可读性和高效的方式编写复杂的查询。您可以使用“从关键字”启动查询,并链接其他功能,例如select,where,order_by,然后加入构建查询。 ECTO还支持子征服,聚合和其他高级SQL功能。> ecto.schema在Ecto库中的作用是什么?数据。它将您的Elixir应用程序的数据映射到数据库表,反之亦然。使用ecto.schema,您可以定义数据的字段,它们的类型以及不同模式之间的任何关联。
ecto如何处理数据库迁移?用于处理数据库迁移。迁移是随着时间的推移会改变数据库结构的脚本。他们可以创建或删除表,添加或删除列,创建索引等等。 ECTO的迁移功能可确保以受控和可逆的方式执行这些更改。
可以使用NOSQL数据库来工作?
,而ECTO主要是为SQL数据库设计的,它也可以与NOSQL一起使用通过使用适配器的数据库。但是,某些功能(例如迁移和复杂查询)可能无法得到完全支持,或者可能会根据所使用的特定NOSQL数据库和适配器的方式有所不同。>
> ecto如何处理交易?和强大的API处理交易。您可以使用ecto.repo.transaction函数来启动事务,如果函数返回,则交易中所做的任何更改都将归结到数据库:确定或返回(如果返回)回滚:error。>什么是ecto.multi? ecto.multi是ECTO的功能,可让您将多个操作分组在一起。当您需要在一次交易中执行多个操作时,这很有用,并且您希望所有这些都成功或整体失败。 ecto.Multi确保数据一致性并使错误处理更加容易。>如何将ECTO与Phoenix?菲尼克斯(Phoenix)一起使用,这是流行的elixir的Web框架,与ECTO无缝集成。 Phoenix使用ECTO来满足其所有数据操作需求,并提供使创建ECTO模式,更改集和迁移的生成器。您还可以在凤凰控制器和视图中直接使用eTo的查询API。我如何了解有关ecto的更多信息?>官方的ecto文档是一个很好的资源,可以了解更多有关eTecto的信息。它为ECTO的所有功能以及示例和最佳实践提供了全面的指南。您还可以在线找到许多详细介绍ECTO的各个方面的教程和博客文章。
> ecto如何处理数据验证?
>
>我如何使用eTOTO执行复杂的查询?这使您可以以可读性和高效的方式编写复杂的查询。您可以使用“从关键字”启动查询,并链接其他功能,例如select,where,order_by,然后加入构建查询。 ECTO还支持子征服,聚合和其他高级SQL功能。> ecto.schema在Ecto库中的作用是什么?数据。它将您的Elixir应用程序的数据映射到数据库表,反之亦然。使用ecto.schema,您可以定义数据的字段,它们的类型以及不同模式之间的任何关联。ecto如何处理数据库迁移?
用于处理数据库迁移。迁移是随着时间的推移会改变数据库结构的脚本。他们可以创建或删除表,添加或删除列,创建索引等等。 ECTO的迁移功能可确保以受控和可逆的方式执行这些更改。
可以使用NOSQL数据库来工作?
>
> ecto如何处理交易?和强大的API处理交易。您可以使用ecto.repo.transaction函数来启动事务,如果函数返回,则交易中所做的任何更改都将归结到数据库:确定或返回(如果返回)回滚:error。>什么是ecto.multi? ecto.multi是ECTO的功能,可让您将多个操作分组在一起。当您需要在一次交易中执行多个操作时,这很有用,并且您希望所有这些都成功或整体失败。 ecto.Multi确保数据一致性并使错误处理更加容易。>如何将ECTO与Phoenix?菲尼克斯(Phoenix)一起使用,这是流行的elixir的Web框架,与ECTO无缝集成。 Phoenix使用ECTO来满足其所有数据操作需求,并提供使创建ECTO模式,更改集和迁移的生成器。您还可以在凤凰控制器和视图中直接使用eTo的查询API。我如何了解有关ecto的更多信息?>官方的ecto文档是一个很好的资源,可以了解更多有关eTecto的信息。它为ECTO的所有功能以及示例和最佳实践提供了全面的指南。您还可以在线找到许多详细介绍ECTO的各个方面的教程和博客文章。
>官方的ecto文档是一个很好的资源,可以了解更多有关eTecto的信息。它为ECTO的所有功能以及示例和最佳实践提供了全面的指南。您还可以在线找到许多详细介绍ECTO的各个方面的教程和博客文章。
以上是ecto库的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

该试点程序是CNCF(云本机计算基础),安培计算,Equinix金属和驱动的合作,简化了CNCF GitHub项目的ARM64 CI/CD。 该计划解决了安全问题和绩效

该教程通过使用AWS服务来指导您通过构建无服务器图像处理管道。 我们将创建一个部署在ECS Fargate群集上的next.js前端,与API网关,Lambda函数,S3桶和DynamoDB进行交互。 Th

与这些顶级开发人员新闻通讯有关最新技术趋势的了解! 这个精选的清单为每个人提供了一些东西,从AI爱好者到经验丰富的后端和前端开发人员。 选择您的收藏夹并节省时间搜索REL
