Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Prisma to ORM stworzony dla środowiska TypeScript i Node.js. Prisma nie tylko stworzy, zaktualizuje całą bazę danych.

Konfiguracja schematu w Prisma

Konfiguracja modeli danych odbywa się w pliku schema.prisma, w którym opisujemy naszą bazę.

Przykładowy schemat dla modelu User:

model User {
  id                  Int                   @id @default(autoincrement())
  username            String                @unique
  email               String                @unique
  createdAt           DateTime              @default(now())
  updatedAt           DateTime              @updatedAt
}

Aktualizacja bazy

Po każdej zmianie w schemacie, wykonujemy jedno z poniższych poleceń aby synchronizować zmiany z bazą danych.

npx prisma db push

npx prisma db push

Komenda ta po prostu „pcha” zmiany bezpośrednio do bazy danych bez tworzenia plików migracji, co jest mniej formalnym podejściem i zwykle używane w środowiskach deweloperskich dla szybkich zmian.

npx prisma migrate dev

npx prisma migrate dev

Komenda ta tworzy pliki migracji, dzięki czemu mamy historie zmian bazy i możemy np wykonać te zapytania na produkcji. Te migracje są następnie wykonywane na bazie danych, aktualizując ją zgodnie z zapisanymi zmianami w plikach migracji. Jest to bezpieczne podejście, które zapewnia, że wszystkie zmiany są rejestrowane.

Instalacja i generowanie klienta Prisma

Aby korzystać z Prisma w aplikacji, należy najpierw zainstalować klienta:

npm install @prisma/client

Po każdej zmianie modelu należy wygenerować klienta jeszcze raz:

prisma generate

Co nam daje klient prisma?

Jak korzystać z klienta Prisma?

Klient Prisma automatycznie generuje metody i typy oparte na zdefiniowanym schemacie.

Przykład użycia:

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()
const allUsers = await prisma.user.findMany()
const user = await prisma.user.create({
  data: {
    username: 'Lukas',
    email: 'lukas@example.com'
  },
})

Prisma studio

Prisma oferuje również Prisma Studio, graficzny interfejs użytkownika do zarządzania danymi(takie coś jak pgAdmin albo phpMyAdmin), który można uruchomić poleceniem:

npx prisma studio

Types

Generując klienta, uzyskujemy również dostęp do typów TypeScript, które można znaleźć w:

./node_modules/.prisma/client/index.d.ts

Typy te można łatwo importować i używać w aplikacji:

import { User } from '@prisma/client';

Database seeding – testowe dane

Prisma umożliwia łatwe uzupełnienie bazy danych testowymi danymi. Możemy wykorzystać bibliotekę @faker-js/faker do generowania danych:

npm install @faker-js/faker

Instalujemy:

npm install -D typescript ts-node @types/node

Tworzymy plik seed.js w folderze prisma:

import { PrismaClient } from "@prisma/client";
import { faker } from "@faker-js/faker";

const prisma = new PrismaClient();

async function main() {
  const user = await prisma.user.create({
    data: {
      username: faker.internet.userName(),
      email: faker.internet.email(),
    },
  });

  for (let i = 0; i < 20; i++) {
    await prisma.post.create({
      data: {
        title: faker.lorem.sentence(),
        content: faker.lorem.paragraph(),
      },
    });
  }
}
main()
  .then(async () => {
    await prisma.$disconnect();
  })
  .catch(async (e) => {
    console.error(e);
    await prisma.$disconnect();
    process.exit(1);
  });

W package.json dodajemy skrypt do seedingu:

  "prisma": {
    "seed": "ts-node prisma/seed.js"
  },

Odpalamy seeding bazy danych:

npx prisma db seed

W wyniku otrzymujemy info:

Environment variables loaded from .env
Running seed command `ts-node prisma/seed.js` ...

🌱  The seed command has been executed.

I mamy uzupełnioną bazę danych gotową do testów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *