hidden: true
Prisma em 10 minutos
Prisma é um ORM que facilita trabalhar com banco de dados. Em vez de SQL, você escreve queries em TypeScript com autocomplete.
Setup
npm install prisma @prisma/client
npx prisma initIsso cria:
prisma/schema.prisma— definição do banco.env— URL de conexão
Schema
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
name String
email String @unique
posts Post[]
createdAt DateTime @default(now())
}
model Post {
id String @id @default(cuid())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId String
createdAt DateTime @default(now())
}Migrations
# Criar migration (development)
npx prisma migrate dev --name init
# Aplicar em produção
npx prisma migrate deployQueries
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
// Criar
const user = await prisma.user.create({
data: { name: "Jean", email: "[email protected]" },
});
// Listar
const users = await prisma.user.findMany();
// Buscar um
const user = await prisma.user.findUnique({
where: { email: "[email protected]" },
});
// Com relações
const userWithPosts = await prisma.user.findUnique({
where: { id: "abc123" },
include: { posts: true },
});
// Atualizar
await prisma.user.update({
where: { id: "abc123" },
data: { name: "Jean Ortega" },
});
// Deletar
await prisma.user.delete({
where: { id: "abc123" },
});
// Filtrar
const publishedPosts = await prisma.post.findMany({
where: { published: true },
orderBy: { createdAt: "desc" },
take: 10,
});Singleton (Next.js)
Em desenvolvimento, o Next.js faz hot reload e cria múltiplas instâncias do Prisma. Use um singleton:
// lib/db.ts
import { PrismaClient } from "@prisma/client";
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined;
};
export const prisma = globalForPrisma.prisma ?? new PrismaClient();
if (process.env.NODE_ENV !== "production") {
globalForPrisma.prisma = prisma;
}Deploy na Veloz
# Variável de ambiente
veloz env set DATABASE_URL="postgres://..."
# Rodar migration
npx prisma migrate deploy
# Deploy do app
veloz deployPrisma Studio
Visualize e edite dados pelo browser:
npx prisma studioAbre em localhost:5555 com uma interface visual para explorar o banco.