sql >> Database >  >> RDS >> Database

Hoe Prisma te gebruiken

Prisma is een interessante ORM.

Een ORM is een abstractielaag over een database.

Ik heb de afgelopen maanden het genoegen gehad Prisma in een paar verschillende projecten te gebruiken, en hier wil ik je laten zien hoe gemakkelijk het is om te beginnen (en door te gaan).

Ik ga Prisma gebruiken in een React-toepassing op basis van Next.js.

U kunt één nieuwe Next.js-app in een map maken met

npx create-next-app

Het eerste dat u hoeft te doen om Prisma toe te voegen, is door prisma . op te nemen in uw dev-afhankelijkheden:

npm install -D prisma

U hebt nu toegang tot het Prisma CLI-hulpprogramma met behulp van npx . Probeer te rennen:

npx prisma

en je ziet de instructies voor het gebruik ervan.

Voer dit nu uit om Prisma in te stellen voor uw project:

npx prisma init

Dit creëert een prisma map, en daarin een schema.prisma bestand:

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

Het creëerde ook een .env bestand, voor het geval je er nog geen had, met de DATABASE_URL omgevingsvariabele:

DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"

Dit moet naar uw database verwijzen.

Laten we dit punt eerst uit de weg ruimen. Prisma ondersteunt veel verschillende soorten (relationele) databases. Ik heb het gebruikt met PostgreSQL en SQLite, maar het ondersteunt ook MySQL, AWS Aurora, MariaDB.

In productie gebruik ik graag de beheerde database van DigitalOcean (verplichte verwijzingslink voor een gratis tegoed van $ 100 hier), maar voor een snelle voorbeeldapp is Railway.app een coole en gratis keuze.

Nadat u zich heeft aangemeld, kunt u met één klik een PostgreSQL-database inrichten:

en onmiddellijk daarna krijg je de verbindings-URL:

Kopieer dat naar je .env bestand als de DATABASE_URL waarde.

Nu is het tijd om een ​​model aan het schema toe te voegen, dat zal worden vertaald naar een databasetabel.

Merk op dat u ook het tegenovergestelde kunt doen, als u een database heeft die al met tabellen is gevuld, door npx prisma introspect uit te voeren. . Prisma genereert het schema uit de database.

Laten we zeggen dat we een chique miljardair zijn die graag auto's verzamelt. We maken een Car model om de lijst met auto's die we willen kopen op te slaan:

model Car {
  id Int @id @default(autoincrement())
  brand String
  model String
  created_at DateTime @default(now())
  bought Boolean @default(false)
}

Ik raad je ten zeerste aan om alles op te zoeken in de Prisma-schemareferentiedocumentatie.

Dit model definieert 5 velden:id , brand , model , created_at , bought , elk met zijn type, of het nu Int, String, DataTime of Boolean is.

id heeft de @id attribuut, wat betekent dat het de primaire sleutel . is , die het databasebeheersysteem vertelt om het uniek te maken. En het is standaard een waarde die automatisch wordt verhoogd, dus wanneer we een nieuw item toevoegen, heeft het altijd een uniek geheel getal dat wordt verhoogd:1, 2, 3, 4...

Merk op dat u ook een unieke waarde kunt gebruiken met @default(cuid()) of @default(uuid()) .

created_at standaard ingesteld op de huidige datetime met @default(now()) , en bought standaard ingesteld op false .

Nu moeten we synchroniseren de database met ons schema. We doen dat door het commando npx prisma migrate . uit te voeren om onze eerste migratie te maken :

npx prisma migrate dev

Nu kun je in de database zien dat er een Car . zal zijn tafel:

en een bestand in uw codebase in de prisma/migrations map met de opdrachten die zijn gebruikt om die tabellen te maken, in dit geval:

-- CreateTable
CREATE TABLE "Car" (
    "id" SERIAL NOT NULL,
    "brand" TEXT,
    "model" TEXT,
    "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "bought" BOOLEAN NOT NULL DEFAULT false,

    PRIMARY KEY ("id")
);

Elke keer dat u het schema wijzigt, moet u deze npx prisma migrate dev . uitvoeren commando om de wijzigingen toe te passen.

Super goed! Nu kunnen we Prisma gebruiken om gegevens in de database in te voegen, gegevens op te halen, gegevens te verwijderen ... en zo.

Installeer nu de @prisma/client pakket met

npm install @prisma/client

Maak een lib map, en daarin een prisma.js het dossier. Daarin initialiseren we het PrismaClient-object:

import { PrismaClient } from '@prisma/client'

let global = {}

const prisma = global.prisma || new PrismaClient()

if (process.env.NODE_ENV === 'development') global.prisma = prisma

export default prisma

Dit stukje code is nodig om overmatige instantiëring van Prisma te voorkomen wanneer we in de ontwikkelingsmodus werken, met frequente vernieuwingen als gevolg van het opnieuw laden van de module. We voegen in feite prisma toe de eerste keer dat we deze uitvoeren naar een globale variabele, en de volgende keer hergebruiken we die variabele.

Nu kunt u in elk bestand dat u Prisma wilt gebruiken

import prisma from 'lib/prisma'

en je bent klaar om te gaan.

Om alle auto's op te halen, gebruik je prisma.car.findMany() :

const cars = await prisma.car.findMany()

U kunt een object doorgeven om de gegevens te filteren, bijvoorbeeld door alle Ford . te selecteren auto's:

const cars = await prisma.car.findMany({
  where: {
    brand: 'Ford',
  },
})

U kunt een enkele auto zoeken aan de hand van zijn id waarde, met behulp van prisma.car.findUnique() :

const car = await prisma.car.findUnique({
  where: {
    id: 1,
  },
})

U kunt een nieuwe auto toevoegen met prisma.car.create() :

const car = await prisma.car.create({
  brand: 'Ford',
  model: 'Fiesta',
})

U kunt een auto verwijderen met prisma.car.delete() :

await prisma.job.delete({
  where: { id: 1 },
})

U kunt de gegevens van een auto bijwerken met prisma.car.update() :

await prisma.job.delete({
  where: { id: 1 },
  data: {
    bought: true
  }
})

Je kunt nog veel meer doen, maar dit is de basis, alles wat je nodig hebt om te beginnen en 95% van wat je nodig hebt in een eenvoudige CRUD-toepassing.


  1. Beste benaderingen voor het uitvoeren van totalen - bijgewerkt voor SQL Server 2012

  2. ROWIDTOCHAR() Functie in Oracle

  3. Hoe verwijder ik een vast aantal rijen met sorteren in PostgreSQL?

  4. Hoe maak je een willekeurige string die geschikt is voor een sessie-ID in PostgreSQL?