Database
 sql >> Base de Dados >  >> RDS >> Database

Como usar Prisma


Prisma é um ORM interessante.

Um ORM é uma camada de abstração sobre um banco de dados.

Tive o prazer de usar o Prisma em alguns projetos diferentes nos últimos meses, e aqui quero mostrar como é fácil começar (e continuar).

Vou usar o Prisma em uma aplicação React baseada em Next.js.

Você pode criar um novo aplicativo Next.js em uma pasta com
npx create-next-app

A primeira coisa que você precisa fazer para adicionar Prisma é incluir prisma em suas dependências de desenvolvimento:
npm install -D prisma

Agora você tem acesso ao utilitário Prisma CLI usando npx . Tente executar:
npx prisma

e você verá as instruções sobre como usá-lo.



Agora execute isso para configurar o Prisma para seu projeto:
npx prisma init



Isso criará um prisma pasta, e dentro dela, um schema.prisma Arquivo:
// 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"
}

Ele também criou um .env arquivo, caso você ainda não tenha um, com o DATABASE_URL variável de ambiente:
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"

Isso tem que apontar para o seu banco de dados.

Vamos tirar esse ponto do caminho primeiro. O Prisma suporta muitos tipos diferentes de bancos de dados (relacionais). Eu usei com PostgreSQL e SQLite, mas também suporta MySQL, AWS Aurora, MariaDB.

Na produção, gosto de usar o banco de dados gerenciado da DigitalOcean (link de referência obrigatório para um crédito gratuito de $ 100 aqui), mas para um aplicativo de exemplo rápido, o Railway.app é uma escolha legal e gratuita.

Depois de se inscrever, você pode provisionar um banco de dados PostgreSQL com um clique:



e imediatamente depois, você obterá o URL de conexão:



Copie isso para o seu .env arquivo como o DATABASE_URL valor.

Agora é hora de adicionar um modelo ao esquema, que será traduzido para uma tabela de banco de dados.

Observe que você também pode fazer o oposto, se tiver um banco de dados já preenchido com tabelas, executando npx prisma introspect . O Prisma irá gerar o esquema a partir do banco de dados.

Digamos que somos um bilionário chique que gosta de colecionar carros. Criamos um Car modelo para armazenar a lista de carros que queremos comprar:
model Car {
  id Int @id @default(autoincrement())
  brand String
  model String
  created_at DateTime @default(now())
  bought Boolean @default(false)
}

Eu recomendo que você procure tudo na documentação de referência do esquema Prisma.

Este modelo define 5 campos:id , brand , model , created_at , bought , cada um com seu tipo, seja Int, String, DataTime ou Boolean.

id tem o @id atributo que significa que é a chave primária , que informa ao sistema de gerenciamento de banco de dados para torná-lo exclusivo. E o padrão é um valor que é incrementado automaticamente, então sempre que adicionamos um novo item, ele sempre tem um número inteiro único que aumenta:1, 2, 3, 4…

Observe que você também pode usar um valor exclusivo com @default(cuid()) ou @default(uuid()) .

created_at padroniza para a data e hora atual com @default(now()) , e bought o padrão é false .

Agora precisamos sincronizar o banco de dados com nosso esquema. Fazemos isso executando o comando npx prisma migrate para criar nossa primeira migração :
npx prisma migrate dev

Agora você pode ver no banco de dados, haverá um Car tabela:





e um arquivo em sua base de código no prisma/migrations pasta com os comandos usados ​​para criar essas tabelas, neste 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")
);

Sempre que você alterar o esquema, precisará executar este npx prisma migrate dev comando para aplicar as alterações.

Excelente! Agora podemos usar o Prisma para inserir dados no banco de dados, recuperar dados, excluir dados... e tudo mais.

Agora instale o @prisma/client pacote com
npm install @prisma/client

Crie uma lib pasta e dentro dela um prisma.js Arquivo. Lá, inicializamos o 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 pedaço de código é necessário para evitar instanciações excessivas do Prisma quando executamos no modo de desenvolvimento, com atualizações frequentes devido ao recarregamento do módulo a quente. Estamos basicamente adicionando prisma para uma variável global na primeira vez que executarmos isso e reutilizar essa variável nas próximas vezes.

Agora em qualquer arquivo que você queira usar o Prisma, você pode adicionar
import prisma from 'lib/prisma'

e você está pronto para ir.

Para recuperar todos os carros, você usa prisma.car.findMany() :
const cars = await prisma.car.findMany()

Você pode passar um objeto para filtrar os dados, por exemplo selecionando todos os Ford carros:
const cars = await prisma.car.findMany({
  where: {
    brand: 'Ford',
  },
})

Você pode procurar um único carro por seu id valor, usando prisma.car.findUnique() :
const car = await prisma.car.findUnique({
  where: {
    id: 1,
  },
})

Você pode adicionar um novo carro usando prisma.car.create() :
const car = await prisma.car.create({
  brand: 'Ford',
  model: 'Fiesta',
})

Você pode excluir um carro usando prisma.car.delete() :
await prisma.job.delete({
  where: { id: 1 },
})

Você pode atualizar os dados de um carro usando prisma.car.update() :
await prisma.job.delete({
  where: { id: 1 },
  data: {
    bought: true
  }
})

Você pode fazer muito mais, mas esses são o básico, tudo o que você precisa para começar e 95% do que você precisa em um aplicativo CRUD simples.