AppMaster biedt uitgebreide mogelijkheden voor het werken met de database. Met behulp van het zoekblok kunt u bijvoorbeeld de benodigde gegevens vinden, er gerelateerde tabellen aan koppelen, deze in de juiste volgorde sorteren, enz. In bepaalde situaties is dit echter mogelijk niet voldoende, en dan komt het SQL Exec-blok de redding. Hiermee kunt u databasequery's uitvoeren met de volledige kracht van SQL.

Laten we de werking van het blok bekijken aan de hand van het voorbeeld van een database die een catalogus met boeken bevat.

Database structure

Laten we wat voorbereidend werk doen. Het is noodzakelijk om een ​​bedrijfsproces te creëren dat, in zijn eenvoudigste vorm, het verzenden van verzoeken mogelijk maakt, evenals het ontvangen van de resultaten ervan.

Business process

U moet ook een eindpunt maken waarmee u toegang krijgt tot dit bedrijfsproces.

Endpoint

In de beginfase zou dit voldoende moeten zijn. U kunt uw toepassing publiceren en doorgaan met testen. Hiervoor is het erg handig om Swagger te gebruiken, die automatisch wordt aangemaakt bij het publiceren.

We gebruiken een eenvoudige zoekopdracht die alle boeken uit de database moet opvragen.

SELECTEER * UIT openbaar.boek

Houd er rekening mee dat de tabel zelf (net als alle andere tabellen die in de database-editor zijn gemaakt) een voorvoegsel heeft dat het schema aangeeft: public.

SQL Request

U kunt verifiëren dat het verzoek succesvol is voltooid en dat het resultaat is ontvangen.

SQL Response

Maar het probleem is dat het erg moeilijk is om het antwoord in deze vorm waar te nemen. Een mogelijke oplossing is om het verzoek een beetje aan te passen en alleen de noodzakelijke velden erin te laten staan, bijvoorbeeld de titel van het boek en het aantal pagina's. Daarnaast zou het redelijk zijn om een ​​limiet te stellen, niet alle boeken uit de database op te vragen, maar jezelf te beperken tot tien.

SELECTEER naam, pagina's VAN public.book LIMIT 10

SQL Response

Veel beter, maar nog steeds niet geschikt voor echt gebruik. In een bedrijfsproces moet je immers niet alleen een verzoek ontvangen, maar ook iets met het resultaat ervan doen. Hiervoor is het niet voldoende om het resultaat in tekstvorm te hebben; je moet er een model van maken dat geschikt is voor verder gebruik.

Om dit te doen, gaan we terug naar het bedrijfsproces en verfijnen het een beetje. In het eindblok voegen we een nieuwe variabele toe: een reeks boekmodellen.

Book Variable

Je hebt ook een blok nodig dat de JSON die je ontvangt als gevolg van het verzoek omzet in een model. Deserialiseer JSON naar model.

Updated Business process

Laten we het vorige verzoek herhalen en ervoor zorgen dat het resultaat veel geschikter is geworden, zowel voor visuele waarneming als voor verder gebruik bij BP.

Updated SQL Response

Nu kunnen we verdergaan met complexere logica. Laten we een bedrijfsproces creëren dat:

  • Ontvangt de titel van het boek als invoer.
  • Bepaalt tot welke categorie (genre) het behoort.
  • Geeft als resultaat 3 willekeurige boeken uit dezelfde categorie (in dit geval mag het boek uit de aanvraag er niet tussen staan)

Om dit te doen, zullen we een nieuw bedrijfsproces creëren dat zoeken met behulp van standaardblokken en het gebruik van SQL-query's combineert.

In het eerste blok moet je een boek vinden op basis van de titel, en ook bepalen tot welke categorieën het behoort. Hiervoor gebruiken we het zoekblok met de volgende parameters:

  • _With = Categorieën - naast het boek zelf vereist het zoekresultaat informatie uit de bijbehorende categorietabel.
  • _Limit = 1 - er hoeft slechts één boek gevonden te worden.
  • _Ilike = False - de naam moet exact overeenkomen met de gevraagde naam.
  • Naam - index van de boektitel, doorgegeven vanuit het Startblok.

Met behulp van het Array Element-blok met index 0 nemen we het eerste (en enige) boek uit het resultaat.

Een boek kan tegelijkertijd tot verschillende categorieën behoren, en in dit geval zal elk ervan bij ons passen. Het kan willekeurig worden geselecteerd met behulp van het willekeurige elementenblok

Hierna hebben we alle benodigde gegevens en hoeft u alleen nog maar het verzoek zelf aan te maken, dat er als volgt uit kan zien:

SELECTEER * VAN public.book WAAR id IN (SELECTEER rel1_id VAN public.book_categorys_category_books_pivot WAAR book_categorys_category_books_pivot.rel2_id = X) EN id <> Y ORDER OP willekeurige() LIMIET 3

Waar X de id van de boekcategorie is, en Y de id van het boek zelf.

Houd er rekening mee dat deze query een subquery bevat. Ten eerste worden vanuit de tabel book_categorys_category_books_pivot (deze wordt gebruikt om informatie op te slaan over de relaties tussen twee tabellen) alle boek-ID's gevonden die overeenkomen met de geselecteerde categorie. Hierna wordt een zoekopdracht uitgevoerd die willekeurige 3 boeken vindt die overeenkomen met het opgegeven bereik, exclusief de boek-ID, waarvan de titel oorspronkelijk aan het bedrijfsproces is doorgegeven.

Voor een meer gedetailleerde studie van de projectdatabasestructuur kunt u de knop Open DB gebruiken in de instellingen voor Implementatieplannen.

Hiermee kunt u de database in de editor openen en direct toegang krijgen tot het bekijken en bewerken van gegevens. U moet echter voorzichtig zijn en er rekening mee houden dat het wijzigen van de datastructuur zelf in de editor het onmogelijk maakt om het project verder te publiceren.

Laten we terugkeren naar het creëren van een bedrijfsproces. Het is noodzakelijk om de compilatie van het verzoek te voltooien en om dit te doen, converteert u het boek en de categorie-ID van geheel getal naar string en stelt u ook het uiteindelijke verzoek samen met behulp van het Concat Strings (Multiple) -blok.

De laatste stap is het uitvoeren van de query, het converteren van het resultaat naar een model en het als queryresultaat naar het End-blok sturen.

no-code

U kunt uw wijzigingen opslaan, een eindpunt maken, uw project publiceren en controleren of de aanvraag correct werkt. In dit geval werd één SQL Exec-blok met een complexe samengestelde query gebruikt om vele andere blokken te vervangen en de structuur van het bedrijfsproces te vereenvoudigen.

Het gebruik van het SQL Exec-blok beperkt zich niet tot het ophalen van gegevens en kan in een grote verscheidenheid aan scenario's worden gebruikt. Laten we nog een paar opties nader bekijken.

  • Het aantal reacties tellen voor een boek met id=X
    SELECTEER AANTAL(id) UIT public.comment WAAR book_id = X
  • Berekening van de gemiddelde beoordeling van een boek, rekening houdend met alle beoordelingen in de commentaren:
    SELECTEER AVG(tarief) VAN public.comment WAAR book_id = X
  • Alle reacties verwijderen die vóór 2023 zijn geschreven (kan bijvoorbeeld worden gebruikt om het logboek snel te wissen).
    VERWIJDEREN * VAN openbaar.commentaar WAAR aangemaakt_at < '2023-01-01'

Concluderend is het vermeldenswaard dat om de beveiliging te verbeteren een filter is toegevoegd aan het SQL Exec-blok voor gevaarlijke bewerkingen die tot schemawijzigingen kunnen leiden.

CREATE/ALTER/DROP/TRUNCATE voor TABLE|COLUMN|INDEX|CONSTRAINT|SEQUENCE|SCHEMA|DATABASE worden uitgeschakeld door het filter als de applicatie wordt gehost op AppMaster-servers. Bij het hosten op locatie zijn alle verzoeken standaard zonder beperkingen beschikbaar.

Was this article helpful?

AppMaster.io 101 Spoedcursus

10 modules
2 weken

Weet je niet waar je moet beginnen? Ga aan de slag met onze spoedcursus voor beginners en verken AppMaster van A tot Z.

Start cursus
Development it’s so easy with AppMaster!

Meer hulp nodig?

Los elk probleem op met de hulp van onze experts. Bespaar tijd en focus op het bouwen van uw applicaties.

headphones

Contact opnemen met ondersteuning

Vertel ons over uw probleem, en we zullen een oplossing voor u vinden.

message

Community-chat

Bespreek vragen met andere gebruikers in onze chat.

Word lid van de community