Prisma es un ORM (Object-Relational Mapping) para Node.js y TypeScript que facilita la interacción con bases de datos de manera segura y eficiente.
Ejecuta el siguiente comando:
npm install prisma --save-dev
npm install @prisma/client
Utiliza el siguiente comando:
npx prisma init
En el archivo .env
, por ejemplo:
DATABASE_URL="postgresql://user:password@localhost:5432/mydb?schema=public"
model User {
id Int @id @default(autoincrement())
name String
email String @unique
}
Ejecuta:
npx prisma migrate dev --name init
Ejecuta:
npx prisma generate
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
const user = await prisma.user.create({
data: { name: 'John Doe', email: 'john@example.com' }
});
console.log(user);
}
main().catch(e => console.error(e)).finally(async () => { await prisma.$disconnect(); });
const users = await prisma.user.findMany();
console.log(users);
Ejecuta:
npx prisma studio
const updatedUser = await prisma.user.update({
where: { id: 1 },
data: { name: 'Nuevo Nombre' }
});
console.log(updatedUser);
await prisma.user.delete({ where: { id: 1 } });
const users = await prisma.user.findMany({ where: { name: "John" } });
const count = await prisma.user.count();
console.log(count);
const user = await prisma.user.findUnique({ where: { email: "john@example.com" } });
const users = await prisma.user.findMany({ orderBy: { name: 'asc' } });
const users = await prisma.user.findMany({ select: { name: true } });
const users = await prisma.user.findMany({ skip: 10, take: 5 });
const userWithPosts = await prisma.user.findUnique({ include: { posts: true } });
await prisma.$transaction([
prisma.user.create({ data: { name: "John" } }),
prisma.post.create({ data: { title: "Nuevo Post", userId: 1 } })
]);
const users = await prisma.user.findMany({
where: {
OR: [
{ name: "John" },
{ email: "john@example.com" }
]
}
});
const users = await prisma.user.findMany({
where: {
AND: [
{ name: "John" },
{ email: { contains: "@example.com" } }
]
}
});
const recentUsers = await prisma.user.findMany({
where: {
createdAt: {
gte: new Date("2024-01-01")
}
}
});
import * as yup from 'yup';
const userSchema = yup.object({
name: yup.string().required(),
email: yup.string().email().required()
});
async function createUser(data) {
await userSchema.validate(data);
return prisma.user.create({ data });
}
const avgAge = await prisma.user.aggregate({
_avg: {
age: true
}
});
console.log(avgAge);
const users = await prisma.user.findMany({
where: {
age: {
gte: 18,
lte: 30
}
}
});
await prisma.user.updateMany({
where: { active: false },
data: { active: true }
});
await prisma.user.deleteMany({
where: { active: false }
});
try {
const user = await prisma.user.create({ data: { email: "invalid-email" } });
} catch (error) {
console.error("Error al crear usuario:", error);
}
import express from 'express';
import { PrismaClient } from '@prisma/client';
const app = express();
const prisma = new PrismaClient();
app.use(express.json());
app.get('/users', async (req, res) => {
const users = await prisma.user.findMany();
res.json(users);
});
app.listen(3000, () => console.log('Servidor corriendo en puerto 3000'));
const result = await prisma.$transaction([
prisma.user.create({ data: { name: "Alice" } }),
prisma.post.create({ data: { title: "Nuevo Post", userId: 1 } })
]);
const users = await prisma.user.findMany({
skip: 10,
take: 5
});
const users = await prisma.user.findMany({
orderBy: {
createdAt: 'desc'
}
});
const exists = await prisma.user.findUnique({
where: { email: "test@example.com" }
}) !== null;
const count = await prisma.user.count();
const users = await prisma.$queryRaw`SELECT * FROM User WHERE active = true`;
const prisma = new PrismaClient({
log: ['query', 'info', 'warn', 'error']
});
model User {
id Int @id @default(autoincrement())
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
userId Int
user User @relation(fields: [userId], references: [id])
}
const userWithPosts = await prisma.user.findUnique({
where: { id: 1 },
include: { posts: true }
});
await prisma.user.delete({
where: { id: 1 }
});
await prisma.user.updateMany({
where: { active: false },
data: { active: true }
});
await prisma.user.deleteMany({
where: { active: false }
});
prisma.$use(async (params, next) => {
console.log(`Ejecutando: ${params.model}.${params.action}`);
return next(params);
});
const users = await prisma.user.findMany({
where: {
OR: [
{ email: { contains: "@gmail.com" } },
{ name: { startsWith: "A" } }
]
}
});
try {
const user = await prisma.user.create({ data: { email: "invalid" } });
} catch (error) {
console.error("Error al crear usuario", error);
}
const express = require('express');
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
const app = express();
app.use(express.json());
app.get('/users', async (req, res) => {
const users = await prisma.user.findMany();
res.json(users);
});
app.listen(3000, () => console.log("Servidor en ejecución"));
await prisma.user.createMany({
data: [
{ name: "Alice", email: "alice@example.com" },
{ name: "Bob", email: "bob@example.com" }
]
});
await prisma.post.update({
where: { id: 1 },
data: { user: { connect: { id: 2 } } }
});
const total = await prisma.user.aggregate({
_count: true,
_avg: { age: true }
});
const { ApolloServer, gql } = require("apollo-server");
const { PrismaClient } = require("@prisma/client");
const prisma = new PrismaClient();
const typeDefs = gql`
type User {
id: ID!
name: String!
}
type Query {
users: [User]
}
`;
const resolvers = {
Query: {
users: () => prisma.user.findMany()
}
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => console.log(`Servidor listo en ${url}`));
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active = true;`;
const result = await prisma.$queryRaw`SELECT * FROM User WHERE email = ${email};`;
model User {
id Int @id @default(autoincrement())
profile Profile?
}
model Profile {
id Int @id @default(autoincrement())
bio String
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
name String
posts Post[] @relation("UserToPost")
}
model Post {
id Int @id @default(autoincrement())
title String
users User[] @relation("UserToPost")
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String @index
}
const users = await prisma.user.findMany({
skip: 10,
take: 10,
});
const count = await prisma.user.count();
await prisma.user.update({
where: { id: 1 },
data: { name: "Nuevo Nombre" }
});
await prisma.user.delete({
where: { id: 1 }
});
const users = await prisma.user.findMany({
where: {
OR: [
{ name: "John" },
{ email: { contains: "@gmail.com" } }
]
}
});
const result = await prisma.user.groupBy({
by: ['role'],
_count: { id: true }
});
const result = await prisma.$transaction([
prisma.user.create({ data: { name: "Alice" } }),
prisma.post.create({ data: { title: "Nuevo Post", userId: 1 } })
]);
const userWithPosts = await prisma.user.findUnique({
where: { id: 1 },
include: { posts: true }
});
try {
const user = await prisma.user.create({ data: { email: "invalid-email" } });
} catch (error) {
console.error("Error al crear usuario", error);
}
const users = await prisma.user.findMany({
where: { age: { gte: 18, lte: 30 } }
});
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export default async function handler(req, res) {
const users = await prisma.user.findMany();
res.json(users);
}
await prisma.user.update({
where: { id: 1 },
data: { posts: { update: { where: { id: 2 }, data: { title: "Nuevo Título" } } } }
});
const prisma = new PrismaClient();
prisma.$connect();
process.on('beforeExit', async () => {
await prisma.$disconnect();
});
const freshUser = await prisma.user.findUnique({
where: { id: 1 },
rejectOnNotFound: true
});
await prisma.user.deleteMany({
where: { role: "inactive" }
});
const user = await prisma.user.findFirst({
where: { email: { endsWith: "@gmail.com" } }
});
const users = await prisma.user.findMany({
orderBy: { name: "asc" }
});
const totalUsers = await prisma.user.count();
const users = await prisma.user.findMany({
distinct: ["role"]
});
const users = await prisma.user.findMany({
where: { role: { not: "admin" } }
});
const user = await prisma.user.upsert({
where: { email: "user@example.com" },
update: { lastLogin: new Date() },
create: { name: "User", email: "user@example.com" }
});
const users = await prisma.user.findMany({
skip: 10,
take: 5
});
const user = await prisma.user.findUnique({
where: { id: 1 },
select: { name: true, posts: { select: { title: true } } }
});
const exists = await prisma.user.findUnique({
where: { email: "test@example.com" }
}) !== null;
await prisma.user.updateMany({
where: { active: false },
data: { active: true }
});
await prisma.user.deleteMany({});
const users = await prisma.user.findMany({
where: { id: { in: [1, 2, 3] } }
});
const users = await prisma.user.findMany({
where: { name: { contains: "John" } }
});
const users = await prisma.user.findMany({
where: { email: { startsWith: "admin@" } }
});
const users = await prisma.user.findMany({
where: { email: { endsWith: "@gmail.com" } }
});
const users = await prisma.user.findMany({
where: {
AND: [
{ role: "admin" },
{ active: true }
]
}
});
const users = await prisma.user.findMany({
where: {
OR: [
{ role: "admin" },
{ role: "editor" }
]
}
});
const users = await prisma.user.findMany({
where: { NOT: { role: "guest" } }
});
const activeUsers = await prisma.user.count({
where: { active: true }
});
await prisma.$transaction([
prisma.user.create({ data: { name: "John" } }),
prisma.post.create({ data: { title: "Post de John", authorId: 1 } })
]);
const users = await prisma.user.findMany({
distinct: ["email"]
});
const groupedUsers = await prisma.user.groupBy({
by: ["role"],
_count: { id: true }
});
await prisma.user.updateMany({
where: { active: false },
data: { active: true }
});
const stats = await prisma.user.aggregate({
_avg: { age: true },
_sum: { age: true },
_max: { age: true }
});
if (!email.includes("@")) {
throw new Error("Email inválido");
}
const user = await prisma.user.create({ data: { email } });
try {
const user = await prisma.user.create({ data: { email: "invalid" } });
} catch (error) {
console.error("Error al crear usuario", error);
}
const user = await prisma.user.findUnique({
where: { id: 1 },
select: { name: true, email: true }
});
const users = await prisma.user.findMany({
select: { name: true, email: true }
});
const prisma = new PrismaClient();
async function main() {
const users = await prisma.user.findMany();
console.log(users);
}
main()
.catch(e => console.error(e))
.finally(async () => await prisma.$disconnect());