Prisma es un ORM interesante.
Un ORM es una capa de abstracción sobre una base de datos.
Tuve el placer de usar Prisma en algunos proyectos diferentes en los últimos meses, y aquí quiero mostrarles lo fácil que es comenzar (y continuar).
Voy a usar Prisma en una aplicación React basada en Next.js.
Puede crear una nueva aplicación Next.js en una carpeta con
npx create-next-app
Lo primero que debe hacer para agregar Prisma es incluir prisma
en tus dependencias de desarrollo:
npm install -D prisma
Ahora tiene acceso a la utilidad Prisma CLI usando npx
. Intenta ejecutar:
npx prisma
y verás las instrucciones de cómo usarlo.
Ahora ejecute esto para configurar Prisma para su proyecto:
npx prisma init
Esto creará un prisma
carpeta, y dentro de ella, un schema.prisma
archivo:
// 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"
}
También creó un .env
archivo, en caso de que aún no tenga uno, con el DATABASE_URL
variable de entorno:
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
Esto tiene que apuntar a su base de datos.
Dejemos este punto fuera del camino primero. Prisma admite muchos tipos diferentes de bases de datos (relacionales). Lo he usado con PostgreSQL y SQLite, pero también es compatible con MySQL, AWS Aurora, MariaDB.
En producción, me gusta usar la base de datos administrada de DigitalOcean (enlace de referencia obligatorio para un crédito gratuito de $ 100 aquí), pero para una aplicación de ejemplo rápida, Railway.app es una opción genial y gratuita.
Después de registrarse, puede aprovisionar una base de datos PostgreSQL con un clic:
e inmediatamente después, obtendrá la URL de conexión:
Cópialo en tu .env
archivo como DATABASE_URL
valor.
Ahora es el momento de agregar un modelo al esquema, que se traducirá a una tabla de base de datos.
Tenga en cuenta que también puede hacer lo contrario, si ya tiene una base de datos con tablas, ejecutando npx prisma introspect
. Prisma generará el esquema a partir de la base de datos.
Digamos que somos un multimillonario elegante al que le gusta coleccionar autos. Creamos un Car
modelo para almacenar la lista de autos que queremos comprar:
model Car {
id Int @id @default(autoincrement())
brand String
model String
created_at DateTime @default(now())
bought Boolean @default(false)
}
Le recomiendo que busque todo en la documentación de referencia del esquema de Prisma.
Este modelo define 5 campos:id
, brand
, model
, created_at
, bought
, cada uno con su tipo, ya sea Int, String, DataTime o Boolean.
id
tiene el @id
atributo que significa que es la clave principal , que le dice al sistema de gestión de base de datos que lo haga único. Y tiene un valor predeterminado que se incrementa automáticamente, por lo que cada vez que agregamos un elemento nuevo, siempre tiene un número entero único que se incrementa:1, 2, 3, 4...
Tenga en cuenta que también puede usar un valor único con @default(cuid())
o @default(uuid())
.
created_at
el valor predeterminado es la fecha y hora actual con @default(now())
y bought
por defecto es false
.
Ahora tenemos que sincronizar la base de datos con nuestro esquema. Lo hacemos ejecutando el comando npx prisma migrate
para crear nuestra primera migración :
npx prisma migrate dev
Ahora puedes ver en la base de datos, habrá un Car
tabla:
y un archivo en su base de código en prisma/migrations
carpeta con los comandos usados para crear esas tablas, en este caso:
-- 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")
);
Cada vez que cambie el esquema, debe ejecutar este npx prisma migrate dev
comando para aplicar los cambios.
¡Estupendo! Ahora podemos usar Prisma para insertar datos en la base de datos, recuperar datos, eliminar datos... y todo eso.
Ahora instala el @prisma/client
paquete con
npm install @prisma/client
Crear una lib
carpeta, y dentro de ella un prisma.js
expediente. Allí, inicializamos el objeto 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
Este fragmento de código es necesario para evitar instancias excesivas de Prisma cuando se ejecuta en modo de desarrollo, con actualizaciones frecuentes debido a la recarga del módulo en caliente. Básicamente estamos agregando prisma
a una variable global la primera vez que ejecutamos esto, y reutilizamos esa variable las próximas veces.
Ahora en cualquier archivo que desee usar Prisma, puede agregar
import prisma from 'lib/prisma'
y estás listo para ir.
Para recuperar todos los autos, usa prisma.car.findMany()
:
const cars = await prisma.car.findMany()
Puede pasar un objeto para filtrar los datos, por ejemplo, seleccionando todos los Ford
coches:
const cars = await prisma.car.findMany({
where: {
brand: 'Ford',
},
})
Puede buscar un solo automóvil por su id
valor, usando prisma.car.findUnique()
:
const car = await prisma.car.findUnique({
where: {
id: 1,
},
})
Puedes agregar un auto nuevo usando prisma.car.create()
:
const car = await prisma.car.create({
brand: 'Ford',
model: 'Fiesta',
})
Puede eliminar un automóvil usando prisma.car.delete()
:
await prisma.job.delete({
where: { id: 1 },
})
Puedes actualizar los datos de un auto usando prisma.car.update()
:
await prisma.job.delete({
where: { id: 1 },
data: {
bought: true
}
})
Puede hacer mucho más, pero eso es lo básico, todo lo que necesita para comenzar y el 95 % de lo que necesita en una aplicación CRUD simple.