Database
 sql >> база данни >  >> RDS >> Database

Как да използвате Prisma

Prisma е интересен ORM.

ORM е абстракционен слой върху база данни.

Имах удоволствието да използвам Prisma в няколко различни проекта през последните месеци и тук искам да ви покажа колко лесно е да започнете (и да продължите).

Ще използвам Prisma в React приложение, базирано на Next.js.

Можете да създадете едно ново приложение Next.js в папка с

npx create-next-app

Първото нещо, което трябва да направите, за да добавите Prisma, е да включите prisma във вашите зависимости:

npm install -D prisma

Сега имате достъп до помощната програма Prisma CLI, като използвате npx . Опитайте да стартирате:

npx prisma

и ще видите инструкциите как да го използвате.

Сега стартирайте това, за да настроите Prisma за вашия проект:

npx prisma init

Това ще създаде prisma папка и вътре в нея schema.prisma файл:

// 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"
}

Той също така създаде .env файл, в случай че все още не сте го имали, с DATABASE_URL променлива на средата:

DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"

Това трябва да сочи към вашата база данни.

Нека първо да премахнем тази точка от пътя. Prisma поддържа много различни видове (релационни) бази данни. Използвал съм го с PostgreSQL и SQLite, но поддържа и MySQL, AWS Aurora, MariaDB.

В производството обичам да използвам управляваната база данни на DigitalOcean (задължителна връзка за препоръка за безплатен кредит от $100 тук), но за кратко примерно приложение Railway.app е страхотен и безплатен избор.

След като се регистрирате, можете да осигурите PostgreSQL база данни с едно щракване:

и веднага след това ще получите URL адреса на връзката:

Копирайте го във вашия .env файл като DATABASE_URL стойност.

Сега е време да добавите модел към схемата, който ще бъде преведен в таблица на база данни.

Имайте предвид, че можете да направите и обратното, ако имате база данни, която вече е попълнена с таблици, като изпълните npx prisma introspect . Prisma ще генерира схемата от базата данни.

Да кажем, че сме изискан милиардер, който обича да колекционира коли. Създаваме Car модел за съхраняване на списъка с автомобили, които искаме да закупим:

model Car {
  id Int @id @default(autoincrement())
  brand String
  model String
  created_at DateTime @default(now())
  bought Boolean @default(false)
}

Силно ви препоръчвам да потърсите всичко в справочната документация на схемата Prisma.

Този модел дефинира 5 полета:id , brand , model , created_at , bought , всеки със своя тип, независимо дали е Int, String, DataTime или Boolean.

id има @id атрибут, което означава, че е първичният ключ , което казва на системата за управление на базата данни да я направи уникална. И по подразбиране има стойност, която се увеличава автоматично, така че всеки път, когато добавим един нов елемент, той винаги има уникално цяло число, което се увеличава:1, 2, 3, 4...

Имайте предвид, че можете също да използвате уникална стойност с @default(cuid()) или @default(uuid()) .

created_at по подразбиране е текущата дата и час с @default(now()) и bought по подразбиране е false .

Сега трябва да синхронизираме базата данни с нашата схема. Правим това, като изпълним командата npx prisma migrate за да създадем първата ни миграция :

npx prisma migrate dev

Сега можете да видите в базата данни, че ще има Car таблица:

и файл във вашата кодова база в prisma/migrations папка с командите, използвани за създаване на тези таблици, в този случай:

-- 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")
);

Всеки път, когато промените схемата, трябва да стартирате тази npx prisma migrate dev команда, за да приложите промените.

Страхотен! Сега можем да използваме Prisma за вмъкване на данни в базата данни, извличане на данни, изтриване на данни... и всичко това.

Сега инсталирайте @prisma/client пакет с

npm install @prisma/client

Създайте lib папка и вътре в нея prisma.js файл. Там инициализираме обекта 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

Тази част от кода е необходима, за да избегнем прекомерни инстанции на Prisma, когато работим в режим на разработка, с чести опреснявания поради горещо презареждане на модула. По същество добавяме prisma към глобална променлива за първи път, когато стартираме това и използваме повторно тази променлива следващия път.

Сега във всеки файл, който искате да използвате Prisma, можете да добавите

import prisma from 'lib/prisma'

и сте готови да тръгнете.

За да извлечете всички коли, използвате prisma.car.findMany() :

const cars = await prisma.car.findMany()

Можете да подадете обект за филтриране на данните, например като изберете всички Ford автомобили:

const cars = await prisma.car.findMany({
  where: {
    brand: 'Ford',
  },
})

Можете да търсите една кола по нейния id стойност, като използвате prisma.car.findUnique() :

const car = await prisma.car.findUnique({
  where: {
    id: 1,
  },
})

Можете да добавите нова кола с помощта на prisma.car.create() :

const car = await prisma.car.create({
  brand: 'Ford',
  model: 'Fiesta',
})

Можете да изтриете кола, като използвате prisma.car.delete() :

await prisma.job.delete({
  where: { id: 1 },
})

Можете да актуализирате данните на автомобил с помощта на prisma.car.update() :

await prisma.job.delete({
  where: { id: 1 },
  data: {
    bought: true
  }
})

Можете да направите много повече, но това са основите, всичко, от което се нуждаете, за да започнете, и 95% от това, от което се нуждаете в обикновено CRUD приложение.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да нулирате главната потребителска парола на Amazon RDS

  2. Мониторинг на забавяне на четене/запис

  3. Коя функция за маскиране на данни трябва да използвам?

  4. Съображения за производителност на управляван екземпляр на Azure SQL

  5. Няколко малки проблема с пробите на Hekaton