sql >> Base de Datos >  >> RDS >> Database

Cómo usar Prisma

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.