Maison Périphériques technologiques Industrie informatique Comprendre l'élixir interroge DSL: les bases

Comprendre l'élixir interroge DSL: les bases

Feb 18, 2025 pm 12:03 PM

ecto interroge dans Elixir: A débutant Guide

Cet article présente Ecto, le langage de requête d'Elixir, vous guidant à travers des techniques de requête de base. Nous couvrirons les jointures, les associations, l'agrégation, etc., en supposant une compréhension de base des principes fondamentaux de l'élixir et de l'Ecto.

Concepts clés:

  • ecto est le DSL d'Elixir pour les interactions de base de données, reflétant étroitement SQL.
  • Il propose des syntaxes de mots clés et de macro, fonctionnellement équivalent mais différents en style.
  • Fonctions de base comme where, limit, offset et distinct permettent une sélection précise de données.
  • Les fonctions d'agrégation (group_by, having, count, avg, sum, min, max) permettent des calculs de données complexes.

En démarrage avec l'application ectoing:

Les exemples utilisent l'application ectoing. Clone, configurer et migrer la base de données comme suit:

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
Copier après la connexion

(MySQL est utilisé ici; Bien que adaptable à d'autres bases de données, certains exemples ultérieurs pourraient être spécifiques à MySQL.)

Le schéma de base de données:

Understanding Elixir's Ecto Querying DSL: The Basics

requêtes de base:

Commençons par des requêtes simples. N'oubliez pas d'importer Ecto.Query dans la coquille d'élixir (iex -S mix).

Remplir tous les utilisateurs:

SQL:

SELECT * FROM users;
Copier après la connexion

ecto (syntaxe des mots clés):

query = Ectoing.User
Ectoing.Repo.all(query)
Copier après la connexion

ecto (syntaxe macro):

query = Ectoing.User |> Ecto.Query.all()
Ectoing.Repo.all(query)
Copier après la connexion

Sélection de champs spécifiques (premier nom, nom de famille):

SQL:

SELECT firstname, surname FROM users;
Copier après la connexion

ecto (syntaxe des mots clés):

query = from u in Ectoing.User, select: [u.firstname, u.surname]
Ectoing.Repo.all(query)
Copier après la connexion

ecto (syntaxe macro):

query = Ectoing.User |> Ecto.Query.select([u], [u.firstname, u.surname])
Ectoing.Repo.all(query)
Copier après la connexion

Les résultats seront des listes de listes, de tuples ou de cartes en fonction de la structure de la clause select.

Filtrage et personnalisation des résultats:

Affinons les requêtes pour sélectionner des sous-ensembles de données.

Sélection des utilisateurs avec nom de famille "Doe":

SQL:

SELECT * FROM users WHERE surname = "doe";
Copier après la connexion

ecto (syntaxe des mots clés):

surname = "doe"
query = from u in Ectoing.User, where: u.surname == ^surname
Ectoing.Repo.all(query)
Copier après la connexion

ecto (syntaxe macro):

surname = "doe"
query = Ectoing.User |> Ecto.Query.where([u], u.surname == ^surname)
Ectoing.Repo.all(query)
Copier après la connexion

Sélection des noms de famille distincts, ordonnés et limités:

SQL:

SELECT DISTINCT surname FROM users LIMIT 3 ORDER BY surname;
Copier après la connexion

ecto (syntaxe des mots clés):

query = from u in Ectoing.User, select: u.surname, distinct: true, limit: 3, order_by: u.surname
Ectoing.Repo.all(query)
Copier après la connexion

ecto (syntaxe macro):

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)
Copier après la connexion

Requêtes d'agrégation:

ecto prend en charge les fonctions d'agrégation.

trouver des utilisateurs avec une note d'amie moyenne de 4 ou plus:

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;
Copier après la connexion

ecto (syntaxe des mots clés):

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)
Copier après la connexion

ecto (syntaxe macro): (structure similaire à la syntaxe des mots clés, en utilisant l'opérateur de tuyau)

Conclusion:

Cette introduction couvre les bases de requête d'Ecto. Les étapes suivantes impliquent d'explorer les jointures, les requêtes complexes et les techniques avancées. Reportez-vous à la documentation Ecto pour un guide complet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Blue Prince: Comment se rendre au sous-sol
1 Il y a quelques mois By DDD
Nordhold: Système de fusion, expliqué
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1664
14
Tutoriel PHP
1269
29
Tutoriel C#
1248
24
Pilote CNCF ARM64: impact et perspectives Pilote CNCF ARM64: impact et perspectives Apr 15, 2025 am 08:27 AM

Ce programme pilote, une collaboration entre le CNCF (Cloud Native Computing Foundation), Ampere Computing, Equinix Metal et ACTUTIE, rationalise ARM64 CI / CD pour les projets GitHub CNCF. L'initiative répond aux problèmes de sécurité et aux performances LIM

Pipeline de traitement d'image sans serveur avec AWS ECS et Lambda Pipeline de traitement d'image sans serveur avec AWS ECS et Lambda Apr 18, 2025 am 08:28 AM

Ce tutoriel vous guide dans la création d'un pipeline de traitement d'image sans serveur à l'aide de services AWS. Nous allons créer un frontend Next.js déployé sur un cluster ECS Fargate, en interagissant avec une passerelle API, des fonctions lambda, des seaux S3 et DynamoDB. Ème

Top 21 newsletters du développeur auquel s'abonner en 2025 Top 21 newsletters du développeur auquel s'abonner en 2025 Apr 24, 2025 am 08:28 AM

Restez informé des dernières tendances technologiques avec ces meilleurs bulletins de développeur! Cette liste organisée offre quelque chose pour tout le monde, des amateurs d'IA aux développeurs assaisonnés du backend et du frontend. Choisissez vos favoris et gagnez du temps à la recherche de rel

See all articles