sql >> Databasteknik >  >> RDS >> Database

Hur du använder Prisma

Prisma är en intressant ORM.

En ORM är ett abstraktionslager över en databas.

Jag har haft nöjet att använda Prisma i några olika projekt under de senaste månaderna, och här vill jag visa dig hur lätt det är att komma igång (och fortsätta).

Jag kommer att använda Prisma i en React-applikation baserad på Next.js.

Du kan skapa en ny Next.js-app i en mapp med

npx create-next-app

Det första du måste göra för att lägga till Prisma är att inkludera prisma i dina dev-beroenden:

npm install -D prisma

Nu har du tillgång till Prisma CLI-verktyget genom att använda npx . Testa att köra:

npx prisma

och du kommer att se instruktionerna om hur du använder den.

Kör nu detta för att ställa in Prisma för ditt projekt:

npx prisma init

Detta skapar en prisma mapp och inuti den en schema.prisma fil:

// 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"
}

Den skapade också en .env fil, om du inte redan har en, med DATABASE_URL miljövariabel:

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

Detta måste peka på din databas.

Låt oss först få den här punkten ur vägen. Prisma stöder många olika typer av (relationella) databaser. Jag har använt det med PostgreSQL och SQLite, men det stöder även MySQL, AWS Aurora, MariaDB.

I produktionen gillar jag att använda DigitalOceans hanterade databas (obligatorisk referenslänk för en gratis kredit på 100 $ här), men för en snabb exempelapp är Railway.app ett coolt och fritt val.

När du har registrerat dig kan du tillhandahålla en PostgreSQL-databas med ett klick:

och omedelbart efter får du anslutningsadressen:

Kopiera det till din .env fil som DATABASE_URL värde.

Nu är det dags att lägga till en modell till schemat, som kommer att översättas till en databastabell.

Observera att du också kan göra tvärtom, om du har en databas redan fylld med tabeller, genom att köra npx prisma introspect . Prisma kommer att generera schemat från databasen.

Låt oss säga att vi är en fancy miljardär som gillar att samla på bilar. Vi skapar en Car modell för att lagra listan över bilar vi vill köpa:

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

Jag rekommenderar dig starkt att slå upp allt i Prisma-schemareferensdokumentationen.

Denna modell definierar 5 fält:id , brand , model , created_at , bought , var och en med sin typ, vare sig det är Int, String, DataTime eller Boolean.

id har @id attribut som betyder att det är den primära nyckeln , som talar om för databashanteringssystemet att göra det unikt. Och den har som standard ett värde som ökas automatiskt, så när vi lägger till ett nytt objekt har det alltid ett unikt heltal som ökar:1, 2, 3, 4...

Observera att du också kan använda ett unikt värde med @default(cuid()) eller @default(uuid()) .

created_at förinställer den aktuella datetime med @default(now()) , och bought är standard till false .

Nu måste vi synkronisera databasen med vårt schema. Vi gör det genom att köra kommandot npx prisma migrate för att skapa vår första migrering :

npx prisma migrate dev

Nu kan du se i databasen att det kommer att finnas en Car tabell:

och en fil i din kodbas i prisma/migrations mapp med kommandona som används för att skapa dessa tabeller, i det här fallet:

-- 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")
);

Varje gång du ändrar schemat behöver du köra denna npx prisma migrate dev kommandot för att tillämpa ändringarna.

Bra! Nu kan vi använda Prisma för att infoga data i databasen, hämta data, radera data... och allt det där.

Installera nu @prisma/client paket med

npm install @prisma/client

Skapa en lib mapp och inuti den en prisma.js fil. Där initierar vi PrismaClient-objektet:

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

Den här kodbiten behövs för att undvika överdrivna instansieringar av Prisma när vi kör i utvecklingsläge, med frekventa uppdateringar på grund av omladdning av heta moduler. Vi lägger i princip till prisma till en global variabel första gången vi kör den här, och återanvänder variabeln nästa gånger.

Nu kan du lägga till

i vilken fil du vill använda Prisma
import prisma from 'lib/prisma'

och du är redo att gå.

För att hämta alla bilar använder du prisma.car.findMany() :

const cars = await prisma.car.findMany()

Du kan skicka ett objekt för att filtrera data, till exempel genom att välja alla Ford bilar:

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

Du kan leta efter en enskild bil genom dess id värde, med prisma.car.findUnique() :

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

Du kan lägga till en ny bil med prisma.car.create() :

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

Du kan ta bort en bil genom att använda prisma.car.delete() :

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

Du kan uppdatera data för en bil med prisma.car.update() :

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

Du kan göra mycket mer, men det är grunderna, allt du behöver för att komma igång och 95 % av vad du behöver i en enkel CRUD-applikation.


  1. 6 sätt att ta bort dubbletter av rader som har en primärnyckel i Oracle

  2. Bästa metoder för SQL varchar-kolumnlängd

  3. Hur man kör SHOW LOCALES i MariaDB

  4. Hur man genererar skript för att lägga till standardbegränsningar till kolumn i flera tabeller i SQL Server-databasen - SQL Server / TSQL självstudie del 94