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
