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.