Heim > Technologie-Peripheriegeräte > IT Industrie > Verstehen von Elixirs Ecto -Abfrage DSL: Die Grundlagen

Verstehen von Elixirs Ecto -Abfrage DSL: Die Grundlagen

William Shakespeare
Freigeben: 2025-02-18 12:03:10
Original
1016 Leute haben es durchsucht

Ecto -Abfrage in Elixir: Ein Anfängerhandbuch

In diesem Artikel wird Ecto, Elixirs Query -Sprache vorgestellt und Sie durch grundlegende Abfragetechniken führt. Wir werden Joins, Assoziationen, Aggregation und vieles mehr behandeln, um ein grundlegendes Verständnis von Elixier- und ECTO -Grundlagen zu verstehen.

Schlüsselkonzepte:

  • ecto ist Elixirs DSL für Datenbankinteraktionen, die SQL.
  • genau widerspiegeln
  • Es bietet Schlüsselwort- und Makro -Abfrage -Syntaxe, funktional äquivalent, aber im Stil unterschiedlich.
  • Kernfunktionen wie where, limit, offset und distinct Ermöglichen Sie eine präzise Datenauswahl.
  • Aggregationsfunktionen (group_by, having, count, avg, sum, min, max) Aktivieren Sie komplexe Datenberechnungen.

Erste Schritte mit der Anwendung ectoing:

Die Beispiele verwenden die Anwendung ectoing. Klon, die Datenbank wie folgt einrichten und migrieren:

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
Nach dem Login kopieren

(MySQL wird hier verwendet; während anpassbar an andere Datenbanken, sind einige spätere Beispiele möglicherweise mySQL-spezifisch.)

Das Datenbankschema:

Understanding Elixir's Ecto Querying DSL: The Basics

Grundlegende Abfragen:

Beginnen wir mit einfachen Fragen. Denken Sie daran, Ecto.Query in der Elixierschale zu importieren (iex -S mix).

alle Benutzer abrufen:

SQL:

SELECT * FROM users;
Nach dem Login kopieren

ecto (Keyword -Syntax):

query = Ectoing.User
Ectoing.Repo.all(query)
Nach dem Login kopieren

ecto (Makrosyntax):

query = Ectoing.User |> Ecto.Query.all()
Ectoing.Repo.all(query)
Nach dem Login kopieren

Auswählen spezifischer Felder (FirstName, Nachname):

SQL:

SELECT firstname, surname FROM users;
Nach dem Login kopieren

ecto (Keyword -Syntax):

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

ecto (Makrosyntax):

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

Die Ergebnisse sind Listen von Listen, Tupeln oder Karten, abhängig von der Struktur select Klausel.

Filterung und Anpassen der Ergebnisse:

Verfeinern wir Abfragen, um Datenuntergruppen auszuwählen.

Benutzer mit Nachname "doe" auswählen:

SQL:

SELECT * FROM users WHERE surname = "doe";
Nach dem Login kopieren

ecto (Keyword -Syntax):

surname = "doe"
query = from u in Ectoing.User, where: u.surname == ^surname
Ectoing.Repo.all(query)
Nach dem Login kopieren

ecto (Makrosyntax):

surname = "doe"
query = Ectoing.User |> Ecto.Query.where([u], u.surname == ^surname)
Ectoing.Repo.all(query)
Nach dem Login kopieren

Auswahl verschiedener Nachnamen, geordnet und begrenzt:

SQL:

SELECT DISTINCT surname FROM users LIMIT 3 ORDER BY surname;
Nach dem Login kopieren

ecto (Keyword -Syntax):

query = from u in Ectoing.User, select: u.surname, distinct: true, limit: 3, order_by: u.surname
Ectoing.Repo.all(query)
Nach dem Login kopieren

ecto (Makrosyntax):

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)
Nach dem Login kopieren

Aggregationsfragen:

Ecto unterstützt Aggregationsfunktionen.

Benutzer mit einer durchschnittlichen Freundschaftsbewertung von 4 oder höher finden:

SQL:

SELECT friend_id, avg(friend_rating) AS avg_rating
FROM friends
GROUP BY friend_id
HAVING avg_rating >= 4
ORDER BY avg_rating DESC;
Nach dem Login kopieren

ecto (Keyword -Syntax):

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)
Nach dem Login kopieren

ecto (Makrosyntax): (ähnliche Struktur wie die Schlüsselwortsyntax mit dem Rohroperator)

Schlussfolgerung:

Diese Einführung deckt die Fragen der Abfrage von Ecto ab. Die nächsten Schritte umfassen die Erkundung von Verbindungen, komplexen Abfragen und fortschrittlichen Techniken. Eine umfassende Anleitung finden Sie in der ECTO -Dokumentation.

Das obige ist der detaillierte Inhalt vonVerstehen von Elixirs Ecto -Abfrage DSL: Die Grundlagen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage