Database
 sql >> Baza danych >  >> RDS >> Database

Jak korzystać z Prismy

Prisma to interesujący ORM.

ORM to warstwa abstrakcji na bazie danych.

Miałem przyjemność używać Prismy w kilku różnych projektach w ciągu ostatnich miesięcy i tutaj chcę pokazać, jak łatwo jest zacząć (i kontynuować).

Zamierzam użyć Prismy w aplikacji React opartej na Next.js.

Możesz utworzyć jedną nową aplikację Next.js w folderze za pomocą

npx create-next-app

Pierwszą rzeczą, którą musisz zrobić, aby dodać Prisma, to dołączyć prisma w zależnościach deweloperskich:

npm install -D prisma

Teraz masz dostęp do narzędzia Prisma CLI za pomocą npx . Spróbuj uruchomić:

npx prisma

a zobaczysz instrukcje, jak z niego korzystać.

Teraz uruchom to, aby skonfigurować Prisma dla swojego projektu:

npx prisma init

To stworzy prisma folder, a wewnątrz niego schema.prisma plik:

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

Utworzył również plik .env plik, jeśli jeszcze go nie masz, z DATABASE_URL zmienna środowiskowa:

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

To musi wskazywać na Twoją bazę danych.

Najpierw usuńmy ten punkt z drogi. Prisma obsługuje wiele różnych rodzajów (relacyjnych) baz danych. Używałem go z PostgreSQL i SQLite, ale obsługuje również MySQL, AWS Aurora, MariaDB.

W produkcji lubię korzystać z zarządzanej bazy danych DigitalOcean (obowiązkowy link polecający do darmowego kredytu o wartości 100 USD tutaj), ale w przypadku szybkiej przykładowej aplikacji Railway.app jest fajnym i darmowym wyborem.

Po zarejestrowaniu się możesz udostępnić bazę danych PostgreSQL jednym kliknięciem:

a zaraz potem otrzymasz adres URL połączenia:

Skopiuj to do swojego pliku .env plik jako DATABASE_URL wartość.

Teraz nadszedł czas, aby dodać model do schematu, który zostanie przetłumaczony na tabelę bazy danych.

Zauważ, że możesz również zrobić odwrotnie, jeśli masz już bazę danych zapełnioną tabelami, uruchamiając npx prisma introspect . Prisma wygeneruje schemat z bazy danych.

Powiedzmy, że jesteśmy fantazyjnym miliarderem, który lubi kolekcjonować samochody. Tworzymy Car model do przechowywania listy samochodów, które chcemy kupić:

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

Gorąco polecam przejrzenie wszystkiego w dokumentacji referencyjnej schematu Prisma.

Ten model definiuje 5 pól:id , brand , model , created_at , bought , każdy ze swoim typem, czy to Int, String, DataTime czy Boolean.

id ma @id atrybut, co oznacza, że ​​jest to klucz podstawowy , który informuje system zarządzania bazą danych, aby był wyjątkowy. I domyślnie jest to wartość, która jest automatycznie zwiększana, więc za każdym razem, gdy dodajemy jeden nowy element, zawsze ma on unikalną liczbę całkowitą, która zwiększa się:1, 2, 3, 4…

Zauważ, że możesz również użyć unikalnej wartości z @default(cuid()) lub @default(uuid()) .

created_at domyślnie na bieżącą datę i godzinę z @default(now()) i bought domyślnie false .

Teraz musimy zsynchronizować baza danych z naszym schematem. Robimy to, uruchamiając polecenie npx prisma migrate stworzyć naszą pierwszą migrację :

npx prisma migrate dev

Teraz możesz zobaczyć w bazie danych, że będzie Car tabela:

i plik w bazie kodu w prisma/migrations folder z poleceniami używanymi do tworzenia tych tabel, w tym przypadku:

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

Za każdym razem, gdy zmieniasz schemat, musisz uruchomić to npx prisma migrate dev polecenie, aby zastosować zmiany.

Świetny! Teraz możemy użyć Prismy do wstawiania danych do bazy danych, pobierania danych, usuwania danych... i tak dalej.

Teraz zainstaluj @prisma/client pakiet z

npm install @prisma/client

Utwórz lib a w nim plik prisma.js plik. Tam inicjujemy obiekt PrismaClient:

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

Ten fragment kodu jest potrzebny, aby uniknąć nadmiernych instancji Prismy, gdy pracujemy w trybie deweloperskim, z częstymi odświeżaniami z powodu ponownego ładowania modułu. Zasadniczo dodajemy prisma do zmiennej globalnej przy pierwszym uruchomieniu i ponownie użyj tej zmiennej następnym razem.

Teraz w dowolnym pliku, którego chcesz użyć Prisma, możesz dodać

import prisma from 'lib/prisma'

i jesteś gotowy do pracy.

Aby pobrać wszystkie samochody, użyj prisma.car.findMany() :

const cars = await prisma.car.findMany()

Możesz przekazać obiekt do filtrowania danych, na przykład wybierając wszystkie Ford samochody:

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

Możesz wyszukać pojedynczy samochód według jego id wartość, używając prisma.car.findUnique() :

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

Możesz dodać nowy samochód za pomocą prisma.car.create() :

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

Możesz usunąć samochód za pomocą prisma.car.delete() :

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

Możesz zaktualizować dane samochodu za pomocą prisma.car.update() :

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

Możesz zrobić o wiele więcej, ale to są podstawy, wszystko, czego potrzebujesz, aby zacząć i 95% tego, czego potrzebujesz w prostej aplikacji CRUD.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Filtrowanie tabel w IRI Workbench

  2. Jak połączyć wyniki dwóch zapytań w SQL?

  3. Generuj zestaw lub sekwencję bez pętli – część 1

  4. Rozwiązania wyzwań generatora serii liczb – Część 1

  5. Sort, który rozlewa się do poziomu 15 000