En este tutorial aprenderas a crear una aplicación de Nextjs que use Prisma como ORM para poder hacer operaciones con base de datos SQL
¿Qué es Prisma?
Prisma es una herramienta moderna de base de datos que actúa como un ORM (Object-Relational Mapping), facilitando la interacción entre las aplicaciones y las bases de datos. Proporciona una capa de abstracción que permite a los desarrolladores trabajar con bases de datos utilizando un lenguaje basado en modelos y consultas tipo SQL. Prisma simplifica tareas como la migración de esquemas, la validación de datos y la generación de consultas, permitiendo un desarrollo más rápido y eficiente, además de mejorar la mantenibilidad del código. Su compatibilidad con múltiples bases de datos y su integración con TypeScript lo convierten en una opción popular entre los desarrolladores modernos.
Herramientas
Antes de empezar a usar Prisma te recomendio instalar una extension muy util llamada Prisma, que esta disponible en multiples editores esta sirve para poder tener resaltado de código y tambien autocompletado de la sintaxis de prisma.
https://www.prisma.io/docs/guides/development-environment/editor-setup
Configuracion del proyecto
mkdir prisma-nodejs-api
cd prisma-nodejs-api
npm init -y
npm i express morgan
Configuracion de Prisma
npm i prisma
npx prisma init
pnpm prisma init
Por defecto Prisma crea un archivo de Configuracion para conectarse a PostgresSQL, pero en nuestro caso vamos a usar sqlite.
en prisma/schema.primsa
:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
Luego en actualiza el archivo .env
DATABASE_URL="file:/.dev.db"
luego en prisma/schema.prisma creemos los modelos:
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model Product {
id Int @id @default(autoincrement())
name String @unique
price Int @default(999)
createdAt DateTime @default(now())
category Category @relation(fields: [categoryId], references: [id])
categoryId Int
}
model Category {
id Int @id @default(autoincrement())
name String @unique
products Product[]
}
Prisma Studio
npx prisma studio
npx prisma migrate dev
te pedira un nombre, coloca first o algo similar
cada vez que añades un nuevo campo a tu table, es necesario hacer una migracion para que lo cambios se reflejen en tu base de datos y tambien para poder obtener el tipado de Typescript en el proyecto
model Product {
id Int @id @default(autoincrement())
name String @unique
quantity Int @default(0)
price Int @default(999)
createdAt DateTime @default(now())
category Category @relation(fields: [categoryId], references: [id])
categoryId Int
}
npx prisma migrate dev