cari
RumahPeranti teknologiindustri ITMemahami Elixir ' s ecto pertanyaan DSL: asas -asas

ecto pertanyaan dalam elixir: Panduan pemula

Artikel ini memperkenalkan bahasa pertanyaan Ecto, Elixir, membimbing anda melalui teknik pertanyaan asas. Kami akan meliputi gabungan, persatuan, pengagregatan, dan banyak lagi, dengan menganggap pemahaman asas mengenai fundamental elixir dan Ecto.

Konsep Utama:

  • ecto adalah DSL Elixir untuk interaksi pangkalan data, mencerminkan SQL.
  • Ia menawarkan sintaks Kata Kunci dan makro pertanyaan, bersamaan dengan fungsi tetapi berbeza dalam gaya.
  • fungsi teras seperti where, limit, offset, dan distinct membolehkan pemilihan data yang tepat.
  • Fungsi Agregasi (group_by, having, count, avg, sum, min, max) Dayakan pengiraan data kompleks.

Bermula dengan aplikasi ectoing:

Contoh menggunakan aplikasi ectoing. Klon, sediakan, dan berhijrah pangkalan data seperti berikut:

git clone https://github.com/tpunt/ectoing
cd ectoing
mix deps.get
# Update credentials in config/config.exs
mix ecto.create
mix ecto.migrate
mix run priv/repo/seeds.exs

(MySQL digunakan di sini; sementara yang boleh disesuaikan dengan pangkalan data lain, beberapa contoh kemudian mungkin MySQL-spesifik.)

Skema pangkalan data:

Understanding Elixir's Ecto Querying DSL: The Basics

Pertanyaan Asas:

mari kita mulakan dengan pertanyaan mudah. Ingatlah untuk mengimport

dalam shell Elixir (Ecto.Query). iex -S mix

Ambil semua pengguna:

SQL:

ecto (sintaks kata kunci):
SELECT * FROM users;

ecto (sintaks makro):
query = Ectoing.User
Ectoing.Repo.all(query)

memilih medan tertentu (nama pertama, nama keluarga):
query = Ectoing.User |> Ecto.Query.all()
Ectoing.Repo.all(query)

SQL:

ecto (sintaks kata kunci):

SELECT firstname, surname FROM users;

ecto (sintaks makro):

query = from u in Ectoing.User, select: [u.firstname, u.surname]
Ectoing.Repo.all(query)

Hasilnya akan menjadi senarai senarai, tuples, atau peta bergantung kepada struktur klausa

.
query = Ectoing.User |> Ecto.Query.select([u], [u.firstname, u.surname])
Ectoing.Repo.all(query)

select penapisan dan penyesuaian hasil:

mari memperbaiki pertanyaan untuk memilih subset data. memilih pengguna dengan nama keluarga "Doe":

SQL:

ecto (sintaks kata kunci):

ecto (sintaks makro):
SELECT * FROM users WHERE surname = "doe";

Memilih nama keluarga yang berbeza, diperintahkan, dan terhad:
surname = "doe"
query = from u in Ectoing.User, where: u.surname == ^surname
Ectoing.Repo.all(query)

SQL:

surname = "doe"
query = Ectoing.User |> Ecto.Query.where([u], u.surname == ^surname)
Ectoing.Repo.all(query)
ecto (sintaks kata kunci):

ecto (sintaks makro):

SELECT DISTINCT surname FROM users LIMIT 3 ORDER BY surname;

Pertanyaan Agregasi:
query = from u in Ectoing.User, select: u.surname, distinct: true, limit: 3, order_by: u.surname
Ectoing.Repo.all(query)

Ecto menyokong fungsi agregasi.
query = Ectoing.User
|> Ecto.Query.select([u], u.surname)
|> Ecto.Query.distinct(true)
|> Ecto.Query.limit(3)
|> Ecto.Query.order_by([u], u.surname)
Ectoing.Repo.all(query)

Mencari pengguna dengan penilaian rakan rata -rata 4 atau lebih besar: SQL:

ecto (sintaks kata kunci):

ecto (sintaks makro): (struktur yang serupa dengan sintaks kata kunci, menggunakan operator paip)

SELECT friend_id, avg(friend_rating) AS avg_rating
FROM friends
GROUP BY friend_id
HAVING avg_rating >= 4
ORDER BY avg_rating DESC;
Kesimpulan:

query = from f in Ectoing.Friend,
  select: %{friend_id: f.friend_id, avg_rating: avg(f.friend_rating)},
  group_by: f.friend_id,
  having: avg(f.friend_rating) >= 4,
  order_by: [desc: avg(f.friend_rating)]
Ectoing.Repo.all(query)
Pengenalan ini meliputi asas -asas pertanyaan Ecto. Langkah seterusnya melibatkan meneroka gabungan, pertanyaan kompleks, dan teknik lanjutan. Rujuk dokumentasi ECTO untuk panduan komprehensif.

Atas ialah kandungan terperinci Memahami Elixir ' s ecto pertanyaan DSL: asas -asas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Surat berita pemaju 21 teratas untuk melanggan pada tahun 2025Surat berita pemaju 21 teratas untuk melanggan pada tahun 2025Apr 24, 2025 am 08:28 AM

Tinggal maklumat mengenai trend teknologi terkini dengan surat berita pemaju teratas ini! Senarai ini menawarkan sesuatu untuk semua orang, dari peminat AI ke pemaju backend dan frontend yang berpengalaman. Pilih kegemaran anda dan menjimatkan masa mencari rel

Paip pemprosesan imej tanpa pelayan dengan AWS ECS dan LambdaPaip pemprosesan imej tanpa pelayan dengan AWS ECS dan LambdaApr 18, 2025 am 08:28 AM

Tutorial ini membimbing anda melalui membina saluran paip pemprosesan imej tanpa pelayan menggunakan perkhidmatan AWS. Kami akan membuat frontend next.js yang digunakan pada kluster ECS Fargate, berinteraksi dengan Gateway API, Fungsi Lambda, Bucket S3, dan DynamoDB. Th

CNCF Arm64 Pilot: Impak dan WawasanCNCF Arm64 Pilot: Impak dan WawasanApr 15, 2025 am 08:27 AM

Program perintis ini, kerjasama antara CNCF (Yayasan Pengkomputeran Native Cloud), pengkomputeran ampere, equinix metal, dan digerakkan, menyelaraskan ARM64 CI/CD untuk projek GitHub CNCF. Inisiatif ini menangani kebimbangan keselamatan dan prestasi lim

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).