>기술 주변기기 >IT산업 >Ecto 라이브러리

Ecto 라이브러리

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌원래의
2025-02-18 09:38:10156검색

Ecto 라이브러리 elixir는 고도로 분산되고 결함이 강한 응용 프로그램을 구축하는 데 사용되는 현대적이고 역동적이고 기능적인 프로그래밍 언어입니다. Ecto는 데이터베이스 작업을위한 주요 라이브러리로, 공통 API의 데이터베이스와 상호 작용하는 도구, 응용 프로그램과 함께 데이터베이스 버전 및 응용 프로그램 내 데이터 처리를 처리 할 수있는 도구를 제공합니다. 이 기사는 Ecto 라이브러리의 주요 측면을 간단히 살펴 봅니다. Ecto 1.x를 위해 작성되었지만이 기사의 예는 Ecto 2와 호환되며 불일치가있는 곳에 언급됩니다. Elixir 및 Mix에 대한 기본 지식이 가정됩니다.

키 테이크 아웃

ecto는 데이터베이스 운영을 처리하기위한 Elixir의 강력한 라이브러리로 데이터베이스 상호 작용, 버전 작성 및 데이터 처리를위한 공통 API를 제공합니다. 설정 프로세스에는 새로운 믹스 애플리케이션을 작성하고 종속성 구성 및 ECTO 리포지토리 모듈을 효과적인 데이터베이스 관리를 위해 응용 프로그램의 감독 트리에 통합하는 것이 포함됩니다. ecto의 마이그레이션 기능은 응용 프로그램 코드와 함께 데이터베이스를 버전으로 만들어 다양한 데이터베이스 상태의 변경 및 응용 프로그램을 용이하게합니다. ecto 스키마 및 변경 사항은 데이터 구조를 정의하고 데이터 검증을 처리하는 데 중요하며, 유효한 데이터 만 조작 및 저장되도록합니다. 이 기사는 ecto를 사용하여 간단한 CRUD 응용 프로그램을 구축하여 레코드 작성, 읽기, 업데이트 및 삭제와 같은 데이터베이스 작업을 수행하는 방법을 보여줍니다.

응용 프로그램 우리는 우리를 위해 메모를 저장하고 검색 할 매우 간단한 응용 프로그램을 처음부터 구축 할 것입니다. 이렇게하면 ecto의 네 가지 주요 구성 요소, 즉 저장소, 스키마, 변경 사항 및 쿼리를 살펴 봅니다. 새로운 응용 프로그램 생성 새 믹스 응용 프로그램을 생성하여 시작하겠습니다 --sup 플래그는 OTP 응용 프로그램에 필요한 추가 보일러 플레이트 코드를 생성합니다. 이 응용 프로그램에는 ecto가 필요하기 때문에 감독 트리가 필요합니다. 의존성 설정 이제, 일부 응용 프로그램 종속성으로 Mix.exs 파일을 업데이트하겠습니다. 이를 위해 우리는 ecto와 그 어댑터 중 하나를 지정하려고합니다. 이를 위해 MySQL을 사용하기로 선택 했으므로 MariaEx 라이브러리를 지정해야합니다 (Ecto는 여러 데이터베이스를 지원합니다). /> 믹스 .EXS 파일에서 Application/0 함수를 다음과 같이 업데이트하십시오.

및 다음과 함께 DEPS/0을 업데이트하십시오

이제 믹스 Deps.get 다음으로 이러한 종속성을 응용 프로그램에 통합해야합니다. 여기에는 Ecto 저장소 용 새 래퍼 모듈을 작성하고, 애플리케이션의 감독 트리를 업데이트하여 해당 새 모듈을 시작하고 감독하며 어댑터의 연결 정보를 구성하는 것이 포함됩니다. 먼저 다음 코드와 함께 lib/notex/repo.ex에서 notex.repo 모듈을 정의하여 시작하겠습니다.

이 모듈 (lib/app_name/repo.ex)의 위치는 기존입니다. Mix Ecto 명령을 사용할 때마다 AppName.repo에서 정의 된 저장소를 찾는 것이 기본값입니다. 우리는 다른 곳에 배치 할 수 있지만 -r (또는 -repo) 플래그를 사용하여 위치를 지정해야한다는 불편 함. 위의 NOTEX.Repo 모듈을 사용하면 ECTO를 사용하여 데이터베이스와 함께 작업 할 수 있습니다. Ecto의 Repo 모듈 (데이터베이스 쿼리 API를 제공하는)에서 기능을 먼저 주입하고 두 번째로 OTP 응용 프로그램을 다음과 같이 명명하여 다음을 수행합니다. ecto 리포지토리는 기본

데이터베이스 mix new notex <span>--sup </span> (사용중인 어댑터에 의해 결정됨)와 상호 작용하는 공통 인터페이스를 제공합니다. 따라서 Ecto는 Terminology Repo를 사용하는 동안 테이블이 아닌 데이터베이스 주변의 래퍼이기 때문에 리포지토리 설계 패턴을 따르지 않습니다.

. 이제 우리는 notex.repo 모듈을 정의 했으므로 이제 notex 모듈 (lib/notex.ex)의 감독 트리에 이것을 추가해야합니다. 다음과 함께 START/2 함수를 업데이트하십시오

우리는 NOTEX.Repo 모듈을 아동 감독자로 추가했습니다 (자체가 감독 OTP 앱이기 때문에). 즉, OTP 응용 프로그램이 감독 할 것이며 응용 프로그램이 신청서 시작시 출발 할 책임이 있음을 의미합니다. Ecto로 생성 된 각 연결은 별도의 프로세스를 사용합니다 (Ploodboy라는 라이브러리를 사용하여 프로세스 풀에서 프로세스가 가져옵니다). 이것은 우리의 쿼리가 동시에 실행될 수 있고 실패 (예 : 타임 아웃)에서 탄력적 일 수 있도록 수행됩니다. 따라서 우리의 응용 프로그램에는 OECTO가 감독이 필요한 자체 프로세스가 있기 때문에 (데이터베이스 연결 풀을 감독하는 감독 트리 포함) 자체 프로세스가 있기 때문입니다. 이것은 Erlang의 관찰자 라이브러리를 사용하여 볼 수있어 응용 프로그램에서 프로세스를 시각화 할 수 있습니다.감독하기 위해 작업자 프로세스에 리포를 추가 한 후에는 데이터베이스와 통신 할 수 있도록 어댑터를 마지막으로 구성해야합니다. `config/config.exs` 파일의 끝에 다음 코드를 배치하십시오 (필요에 따라 세부 정보 업데이트) :
mix new notex <span>--sup
</span>
여기서는 데이터베이스와의 통신을 활성화하기 위해 OTP 응용 프로그램 이름 (: NOTEX)의 ​​이름과 새로 정의 된 모듈 (NOTEX.Repo)의 이름을 지정합니다. 다른 구성 옵션은 매우 자명해야합니다. Ecto 2는 응용 프로그램에서 사용중인 Ecto 저장소 목록을 추가로 지정해야합니다. ecto는 실제로 위의 repo 모듈을 혼합 작업으로 설정하기위한 바로 가기를 제공합니다. Mix ecto.gen.repo. 이렇게하면 당사에 대한 리포지토리 모듈을 생성하고 일부 기본 구성으로 config.exs 파일을 업데이트합니다 (Repo 모듈은 여전히 ​​감독 트리에 수동으로 추가되어야합니다). 나는 수동으로 Ecto를 설정하는 방법을 보여주는 교훈적인 이유와 (그리고 Repo Generator가 Postgres를 사용하고 있다고 가정한다는 사실을 보여주기 때문에 주로 여기에서 그것을 사용하지 않았으므로, 우리는 어쨌든 구성에서 어댑터를 업데이트해야했을 것입니다). 🎜> 계속 진행하기 전에 프로세스 계층 구조를 매우 빠르게 살펴 보겠습니다. (Ecto 2를 실행중인 경우 먼저 프로젝트를 컴파일하려고 시도하기 전에 Mix Ecto.create로 데이터베이스를 작성해야합니다.) Elixir의 대화식 쉘에서 응용 프로그램을 시작한 다음 관찰자를 시작하십시오 :

.

응용 프로그램 탭으로 탐색하면 신청서가 감독자인지를 포함하여 응용 프로그램의 프로세스를 볼 수 있습니다.

따라서이 응용 프로그램은 OTP 앱이어야합니다. 그러나 그것은이 기사에서 프로세스와 OTP와 관련하여 우리가 갈 것입니다. 그들은 앞으로 나중에 기사에서 더 자세히 다룰 것입니다.
<span>def <span>application</span> do
</span>  <span>[applications: [:logger, :ecto, :mariaex],
</span>   <span>mod: {Notex, []}]
</span><span>end
</span>
데이터베이스 및 테이블 생성 이제 해당 설정으로 데이터베이스와 테이블을 만들 수 있습니다. 데이터베이스를 생성하려면 다음 명령을 실행하십시오

테이블을 만들려면 Ecto의 마이그레이션 기능을 사용합니다. 마이그레이션을 통해 소스 코드와 함께 데이터베이스 버전을 버전 할 수 있으므로 변경 사항을 추적하고 다른 상태를 적용 할 수 있습니다. 따라서 데이터베이스의 구조를 변경할 때마다 새로운 마이그레이션을 만듭니다. 다음과 같이 믹스 ecto.gen.migration 명령으로 새로운 마이그레이션을 만들 수 있습니다.

위의 것은 새 마이그레이션 파일뿐만 아니라 Priv/Repo/Migrations에서 새 마이그레이션 폴더를 생성해야합니다. 이 파일은 마이그레이션 이름과 함께 생성 된 날짜 및 시간 (Easy Directory 주문)으로 접두사입니다. 해당 파일을 열고 다음으로 수정하십시오.
mix new notex <span>--sup
</span>
물건을 간단하게 유지하면서, 우리는 Create Macro를 사용하여 Note_Name과 Note_Content의 두 필드로 새 테이블 (음표)을 정의했습니다. 기본 키는 우리를 위해 자동으로 생성됩니다 (ID). 두 분야 모두 간단한 문자열로 정의되었지만 Ecto는 여러 유형을 지원합니다. 문서에서 확인할 수 있습니다. 마이그레이션이 완료되면 이제 다음 명령으로 마이그레이션을 실행할 수 있습니다.

이것은 3 개의 필드 (세 번째 필드 ID, 기본 키)가있는 노트 테이블을 만듭니다. 테이블이 만들어지면 이제 테이블 모델을 만들 시간입니다. 이 모델은 테이블의 필드와 해당 유형을 정의하는 데 사용됩니다. 데이터를 캐스팅하고 검증 할 때 응용 프로그램 및 Ecto의 쿼리 DSL에서 사용됩니다. 모델 정의에는 가상 필드 (마이그레이션 정의와 달리)가 포함될 수 있으며, 이는 일반적으로 지속되지 않으려는 비밀번호 (예 : 비 암호)를 유지하는 데 사용됩니다. 가장 기본적인 형태로, 우리의 notex.note 모델 (lib/notex/note.ex에 위치)은 다음과 같습니다.

우리는 ecto.schema 모듈을 주입하여 스키마 매크로를 사용하여 필드와 해당 유형을 정의 할 수 있도록합니다. 이러한 정의는 나중에 Ecto의 Changes 세트를 사용했을 때 중요해질 것입니다. 스키마 매크로가 우리를 위해하는 다른 일은 유형의 구조를 현재 모듈로 정의하는 것입니다 (이 경우 %notex.note {}). 이 구조물은 우리가 새로운 Changes 셋을 만들고 (곧 이것에 대해 자세히 설명하고) 표에 데이터를 삽입 할 수 있습니다. 위의 내용만으로도 IEX를 발사하고 데이터베이스 쿼리를 시작할 수 있습니다.

(콘솔 디버깅 정보가 수정되었습니다.) ecto의 쿼리 모듈은 쉘에서 당사에게 모든 쿼리 DSL 매크로를 사용할 수 있도록 가져 오기 위해 가져옵니다. 그런 다음 간단한 쿼리를 생성하여 모든 레코드를 반환하여 (모두 1/1 사용) Note_Name 필드 만 선택합니다. 현재 데이터베이스에 레코드가 없으므로 빈 목록을 반환합니다. 새 Changes 세트를 만들어 테이블에 삽입하겠습니다 :

<span>def <span>application</span> do
</span>  <span>[applications: [:logger, :ecto, :mariaex],
</span>   <span>mod: {Notex, []}]
</span><span>end
</span>
(콘솔 디버깅 정보가 수정되었습니다.) 우리는 Ecto.query를 다시 가져 오는 것으로 시작합니다. 이는 마지막 페치 작업에 필요합니다 (특히 매크로에서). 그런 다음 Ecto.Changeset의 Change/1 함수를 사용하여 %notex.note {} struct를 사용하여 새 Changeset을 만듭니다. 이 변경 사항이 삽입 된 다음 검색됩니다 변경 사항은 레코드로 작업 할 때 사용하는 것입니다. 이를 통해 삽입 전에 데이터의 변경 사항을 추적 할 수있을뿐만 아니라 이러한 변경 사항을 검증하고 스키마 정의에 따라 올바른 데이터 유형에 값을 캐스팅 할 수 있습니다. 위에서 볼 수 있듯이 �to.changeset {} struct에는 변경 사항이 유효한지 확인하는 데 유용한 여러 멤버가 포함되어 있습니다 (Changeset.valid?). .ERRORS) 및 on.

IEX에서이를 수행하면 약간 지저분 해지 기 때문에 일부 변경 사항 및 쿼리 작업을 보여주기 위해 NotEx.Note 모델을 업데이트하겠습니다.

5 가지 새로운 기능 각각을 살펴 보겠습니다. insert_note/1 함수는 우리를 위해 새로운 메모를 만듭니다. Cast/4 함수는 입력 필드에서 각 필드 유형 (스키마 정의에 따라)으로 데이터의 캐스팅을 처리 할뿐만 아니라 필요한 모든 필드에 값이 있는지 확인합니다. Cast/4에서 반환 된 변경 사항이 데이터베이스에 삽입됩니다. Ecto 2에서는 Cast/3 및 Validate_Required/3 기능을 Cast/4 대신 사용해야합니다. get_notes/0 함수는 테이블에서 모든 음표의 튜플 목록을 반환합니다. 이것은 select 문의 패턴 일치를 통해 수행됩니다. (예를 들어 Select : %{id : n.id, note_name : n.note_name}을 선택하여 맵 목록을 쉽게 반환 할 수 있습니다. get_note/1 함수는 메모 ID에 따라 테이블에서 단일 음표를 검색합니다. 이것은 Get를 통해 이루어집니다! 기능, 성공시 메모를 반환하거나 실패시 던지는 기능.

update_note/1 함수는 제공된 메모 ID에 따라 메모를 업데이트합니다. 함수 서명 (ID 키)의 맵에서 문자열 키를 주목하십시오. 이것은 피닉스 프레임 워크 (Phoenix Framework)에서 얻은 컨벤션으로, 비 사양화 된 데이터 (일반적으로 사용자가 부여 된)는 문자열 키가있는 맵으로 표시되며 위생화 된 데이터는 원자 키가있는 맵으로 표시됩니다. 업데이트를 수행하려면 먼저 데이터베이스에서 ID에 따라 메모를 검색 한 다음 Cast/4 기능을 사용하여 최종적으로 업데이트 된 변경 사항을 데이터베이스에 다시 삽입하기 전에 레코드에 변경 사항을 적용합니다. <_> delete_note/1 함수는 데이터베이스에서 메모를 제거합니다. 먼저 ID를 통해 데이터베이스에서 메모를 가져온 다음 (update_note/1 함수와 유사), 반환 된 노트 구조를 사용하여 삭제합니다.
mix new notex <span>--sup
</span>
. 위의 CRUD 작업이 제자리에 있으면 IEX로 돌아와서 시도해 봅시다.

(콘솔 디버깅 정보가 수정되었습니다.) 그리고 거기에 우리는 그것을 가지고 있습니다. 우리는 출력을 렌더링하고 API를 쿼리하기 위해 더 잘 만들 수 있지만,이를 확장으로 남겨 둘 것입니다. 왜냐하면 그것들은 우리가 다루고있는 것과 접하는 것이기 때문입니다 (이 기사는 충분히 길어집니다).

.

결론 이 기사는 처음부터 간단한 CRUD 응용 프로그램을 만들어 Ecto의 기본 사항을 살펴 보았습니다. 우리는 OTP와 같은 접선 주제를 다루는 것과 함께 마이그레이션, 스키마 및 쿼리 DSL을 포함하여 레코드 및 데이터베이스 변경을 관리하는 많은 능력 ecto 팩을 보았습니다. 나는 이것이 Elixir의 데이터베이스 작업에 속도를 높이고 자하는 사람들에게 좋은 입문서 역할을했기를 바랍니다!다음 기사에서는 Elixir의 Ecto Querying DSL의 기본 사항을 살펴 봅니다. Elixir의 Ecto Library에 대한 질문 (FAQ) Elixir의 Ecto Library의 목적은 무엇입니까?

Elixir의 Ecto 라이브러리는 Elixir의 데이터베이스 래퍼 및 언어 통합 쿼리입니다. 응용 프로그램의 모든 데이터 조작 작업을 처리하도록 설계되어 데이터베이스와 상호 작용할 수있는 통합 API를 제공합니다. Ecto를 사용하면 레코드를 작성, 읽기, 업데이트 및 삭제할 수있을뿐만 아니라 복잡한 쿼리, 트랜잭션 및 마이그레이션을 수행 할 수 있습니다. PostgreSQL 및 MySQL을 포함한 다양한 데이터베이스를 지원하므로 Elixir 개발자를위한 다목적 도구입니다.

Ecto는 데이터 검증을 어떻게 처리합니까?

Ecto는 데이터 검증에 "Changesets"라는 기능을 사용합니다. . 변경 사항은 오류, 유효성 검사 및 유형 캐스팅 정보와 함께 데이터베이스에 변경을 보유하는 데이터 구조입니다. 변경 사항은 유효한 데이터 만 데이터베이스에 저장되도록하여 데이터 검증 및 오류 처리를위한 강력한 메커니즘을 제공합니다.

ecto를 사용하여 복잡한 쿼리를 어떻게 수행 할 수 있습니까?

Ecto는 강력한 쿼리 API를 제공합니다. 이를 통해 복잡한 쿼리를 읽을 수 있고 효율적인 방식으로 작성할 수 있습니다. From Keyword를 사용하여 쿼리를 시작하고 Select, Where, Order_By 및 가입과 같은 다른 기능을 체인 할 수 있습니다. ecto는 또한 하위 쿼리, 집계 및 기타 고급 SQL 기능을 지원합니다.

elixir의 Ecto 라이브러리에서 ecto.schema의 역할은 무엇입니까?

ecto.schema는 귀하의 구조를 정의하는 모듈입니다. 데이터. ELIXIR 응용 프로그램에서 데이터를 데이터베이스 테이블로 매핑하고 그 반대도 마찬가지입니다. ecto.schema를 사용하면 데이터의 필드, 유형 및 다양한 스키마 간의 연관성을 정의 할 수 있습니다.

Ecto는 데이터베이스 마이그레이션을 어떻게 처리합니까?

ecto는 내장 메커니즘을 제공합니다. 데이터베이스 마이그레이션을 처리합니다. 마이그레이션은 시간이 지남에 따라 데이터베이스의 구조를 변경하는 스크립트입니다. 테이블을 만들거나 삭제하고 열을 추가 또는 제거하고 인덱스를 만들 수 있습니다. Ecto의 마이그레이션 기능은 이러한 변경 사항이 제어되고 가역적으로 수행되도록합니다.

NOSQL 데이터베이스와 함께 작용할 수 있습니까?

Ecto는 주로 SQL 데이터베이스를 위해 설계되었지만 NOSQL과 함께 작동 할 수도 있습니다. 어댑터 사용을 통한 데이터베이스. 그러나 마이그레이션 및 복잡한 쿼리와 같은 일부 기능은 사용 된 특정 NOSQL 데이터베이스 및 어댑터에 따라 완전히 지원되지 않거나 다르게 작동 할 수 있습니다.

ECTO는 트랜잭션을 어떻게 처리합니까?

Ecto는 간단한 것을 제공합니다. 거래 처리를위한 강력한 API. ecto.repo.transaction function을 사용하여 트랜잭션을 시작할 수 있으며 트랜잭션 내에서 변경된 변경 사항이 반환되는 경우 다음과 같은 경우 데이터베이스에 커밋됩니다. ecto.multi?

ecto.multi는 여러 작업을 함께 그룹화 할 수있는 Ecto의 특징입니다. 단일 트랜잭션에서 여러 운영을 수행해야 할 때 유용하며, 이들 모두가 성공하거나 전체적으로 실패하기를 원합니다. ecto.multi는 데이터 일관성을 보장하고 오류 처리를 더 쉽게 만듭니다.

elixir의 인기있는 웹 프레임 워크 인 Phoenix와 함께 Ecto를 어떻게 사용하려면 Ecto와 완벽하게 통합됩니다. Phoenix는 모든 데이터 조작 요구에 대해 Ecto를 사용하고 Ecto 스키마, 변경 사항 및 마이그레이션을 쉽게 만들 수있는 생성기를 제공합니다. Phoenix 컨트롤러 및보기에서 Ecto의 쿼리 API를 직접 사용할 수도 있습니다.

Ecto에 대해 더 많이 배울 수 있습니까?

공식 ecto 문서는 Ecto에 대해 더 많이 배우기위한 훌륭한 자료입니다. 예제 및 모범 사례와 함께 Ecto의 모든 기능에 대한 포괄적 인 가이드를 제공합니다. 또한 Ecto의 다양한 측면을 더 자세히 다루는 많은 튜토리얼과 블로그 게시물을 온라인으로 찾을 수 있습니다.

위 내용은 Ecto 라이브러리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:OSVR 소개다음 기사:OSVR 소개