Preguntas y Respuestas sobre Prisma

1. ¿Qué es Prisma y para qué se utiliza?

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.

2. ¿Cómo se instala Prisma en un proyecto Node.js?

Ejecuta el siguiente comando:

npm install prisma --save-dev
npm install @prisma/client

3. ¿Cómo se inicializa Prisma en un proyecto?

Utiliza el siguiente comando:

npx prisma init

4. ¿Dónde se configura la conexión a la base de datos?

En el archivo .env, por ejemplo:

DATABASE_URL="postgresql://user:password@localhost:5432/mydb?schema=public"

5. ¿Cómo definir un modelo en Prisma?

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
}

6. ¿Cómo aplicar migraciones en Prisma?

Ejecuta:

npx prisma migrate dev --name init

7. ¿Cómo generar el cliente de Prisma?

Ejecuta:

npx prisma generate

8. ¿Cómo crear un nuevo usuario con Prisma Client?

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(); });

9. ¿Cómo obtener todos los usuarios de la base de datos?

const users = await prisma.user.findMany();
console.log(users);

10. ¿Cómo abrir Prisma Studio?

Ejecuta:

npx prisma studio

11. ¿Cómo actualizar un usuario en Prisma?

const updatedUser = await prisma.user.update({
    where: { id: 1 },
    data: { name: 'Nuevo Nombre' }
});
console.log(updatedUser);

12. ¿Cómo eliminar un usuario en Prisma?

await prisma.user.delete({ where: { id: 1 } });

13. ¿Cómo filtrar usuarios con una condición en Prisma?

const users = await prisma.user.findMany({ where: { name: "John" } });

14. ¿Cómo contar registros en Prisma?

const count = await prisma.user.count();
console.log(count);

15. ¿Cómo obtener un solo usuario en Prisma?

const user = await prisma.user.findUnique({ where: { email: "john@example.com" } });

16. ¿Cómo ordenar registros en Prisma?

const users = await prisma.user.findMany({ orderBy: { name: 'asc' } });

17. ¿Cómo obtener solo algunos campos en Prisma?

const users = await prisma.user.findMany({ select: { name: true } });

18. ¿Cómo paginar resultados en Prisma?

const users = await prisma.user.findMany({ skip: 10, take: 5 });

19. ¿Cómo realizar consultas anidadas en Prisma?

const userWithPosts = await prisma.user.findUnique({ include: { posts: true } });

20. ¿Cómo usar transacciones en Prisma?

await prisma.$transaction([
    prisma.user.create({ data: { name: "John" } }),
    prisma.post.create({ data: { title: "Nuevo Post", userId: 1 } })
]);

Preguntas y Respuestas sobre Prisma

21. ¿Cómo hacer consultas OR en Prisma?

const users = await prisma.user.findMany({
    where: {
        OR: [
            { name: "John" },
            { email: "john@example.com" }
        ]
    }
});

22. ¿Cómo hacer consultas AND en Prisma?

const users = await prisma.user.findMany({
    where: {
        AND: [
            { name: "John" },
            { email: { contains: "@example.com" } }
        ]
    }
});

23. ¿Cómo usar filtros de fechas en Prisma?

const recentUsers = await prisma.user.findMany({
    where: {
        createdAt: {
            gte: new Date("2024-01-01")
        }
    }
});

24. ¿Cómo validar datos antes de insertarlos en Prisma?

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

25. ¿Cómo realizar una consulta agregada en Prisma?

const avgAge = await prisma.user.aggregate({
    _avg: {
        age: true
    }
});
console.log(avgAge);

26. ¿Cómo hacer consultas con operadores avanzados en Prisma?

const users = await prisma.user.findMany({
    where: {
        age: {
            gte: 18,
            lte: 30
        }
    }
});

27. ¿Cómo actualizar múltiples registros a la vez en Prisma?

await prisma.user.updateMany({
    where: { active: false },
    data: { active: true }
});

28. ¿Cómo eliminar múltiples registros en Prisma?

await prisma.user.deleteMany({
    where: { active: false }
});

29. ¿Cómo manejar errores en Prisma?

try {
    const user = await prisma.user.create({ data: { email: "invalid-email" } });
} catch (error) {
    console.error("Error al crear usuario:", error);
}

30. ¿Cómo usar Prisma con Express.js?

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

 

 

Preguntas y Respuestas sobre Prisma

31. ¿Cómo utilizar transactions en Prisma?

const result = await prisma.$transaction([
    prisma.user.create({ data: { name: "Alice" } }),
    prisma.post.create({ data: { title: "Nuevo Post", userId: 1 } })
]);

32. ¿Cómo hacer consultas paginadas en Prisma?

const users = await prisma.user.findMany({
    skip: 10,
    take: 5
});

33. ¿Cómo usar orderBy para ordenar resultados en Prisma?

const users = await prisma.user.findMany({
    orderBy: {
        createdAt: 'desc'
    }
});

34. ¿Cómo verificar si un registro existe en Prisma?

const exists = await prisma.user.findUnique({
    where: { email: "test@example.com" }
}) !== null;

35. ¿Cómo contar registros en Prisma?

const count = await prisma.user.count();

36. ¿Cómo usar raw SQL en Prisma?

const users = await prisma.$queryRaw`SELECT * FROM User WHERE active = true`;

37. ¿Cómo manejar conexiones de base de datos en Prisma?

const prisma = new PrismaClient({
    log: ['query', 'info', 'warn', 'error']
});

38. ¿Cómo definir relaciones entre modelos en Prisma?

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])
}

39. ¿Cómo hacer consultas con relaciones en Prisma?

const userWithPosts = await prisma.user.findUnique({
    where: { id: 1 },
    include: { posts: true }
});

40. ¿Cómo eliminar un usuario y sus relaciones en Prisma?

await prisma.user.delete({
    where: { id: 1 }
});

 

Preguntas y Respuestas sobre Prisma

41. ¿Cómo actualizar múltiples registros en Prisma?

await prisma.user.updateMany({
    where: { active: false },
    data: { active: true }
});

42. ¿Cómo eliminar múltiples registros en Prisma?

await prisma.user.deleteMany({
    where: { active: false }
});

43. ¿Cómo usar middlewares en Prisma?

prisma.$use(async (params, next) => {
    console.log(`Ejecutando: ${params.model}.${params.action}`);
    return next(params);
});

44. ¿Cómo hacer una consulta condicional en Prisma?

const users = await prisma.user.findMany({
    where: {
        OR: [
            { email: { contains: "@gmail.com" } },
            { name: { startsWith: "A" } }
        ]
    }
});

45. ¿Cómo manejar errores en Prisma?

try {
    const user = await prisma.user.create({ data: { email: "invalid" } });
} catch (error) {
    console.error("Error al crear usuario", error);
}

46. ¿Cómo usar Prisma con Express.js?

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

47. ¿Cómo hacer bulk insert en Prisma?

await prisma.user.createMany({
    data: [
        { name: "Alice", email: "alice@example.com" },
        { name: "Bob", email: "bob@example.com" }
    ]
});

48. ¿Cómo actualizar datos de relaciones en Prisma?

await prisma.post.update({
    where: { id: 1 },
    data: { user: { connect: { id: 2 } } }
});

49. ¿Cómo hacer una consulta agregada en Prisma?

const total = await prisma.user.aggregate({
    _count: true,
    _avg: { age: true }
});

50. ¿Cómo usar Prisma con GraphQL?

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}`));

 

Preguntas y Respuestas sobre Prisma

52. ¿Cómo usar raw SQL en Prisma?

const result = await prisma.$queryRaw`SELECT * FROM User WHERE active = true;`;

53. ¿Cómo ejecutar consultas parametrizadas en Prisma?

const result = await prisma.$queryRaw`SELECT * FROM User WHERE email = ${email};`;

54. ¿Cómo manejar relaciones uno a uno en Prisma?

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
}

55. ¿Cómo definir relaciones muchos a muchos en Prisma?

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

56. ¿Cómo usar índices en Prisma?

model User {
    id    Int    @id @default(autoincrement())
    email String @unique
    name  String @index
}

57. ¿Cómo realizar paginación en Prisma?

const users = await prisma.user.findMany({
    skip: 10,
    take: 10,
});

58. ¿Cómo contar registros en Prisma?

const count = await prisma.user.count();

59. ¿Cómo actualizar parcialmente un registro en Prisma?

await prisma.user.update({
    where: { id: 1 },
    data: { name: "Nuevo Nombre" }
});

60. ¿Cómo eliminar un solo registro en Prisma?

await prisma.user.delete({
    where: { id: 1 }
});

 

 

Preguntas y Respuestas sobre Prisma

61. ¿Cómo realizar una consulta con múltiples condiciones en Prisma?

const users = await prisma.user.findMany({
    where: {
        OR: [
            { name: "John" },
            { email: { contains: "@gmail.com" } }
        ]
    }
});

62. ¿Cómo agrupar resultados en Prisma?

const result = await prisma.user.groupBy({
    by: ['role'],
    _count: { id: true }
});

63. ¿Cómo utilizar transactions en Prisma?

const result = await prisma.$transaction([
    prisma.user.create({ data: { name: "Alice" } }),
    prisma.post.create({ data: { title: "Nuevo Post", userId: 1 } })
]);

64. ¿Cómo realizar consultas anidadas en Prisma?

const userWithPosts = await prisma.user.findUnique({
    where: { id: 1 },
    include: { posts: true }
});

65. ¿Cómo manejar errores en Prisma?

try {
    const user = await prisma.user.create({ data: { email: "invalid-email" } });
} catch (error) {
    console.error("Error al crear usuario", error);
}

66. ¿Cómo hacer consultas con rangos en Prisma?

const users = await prisma.user.findMany({
    where: { age: { gte: 18, lte: 30 } }
});

67. ¿Cómo usar Prisma con Next.js?

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

68. ¿Cómo actualizar datos relacionados en Prisma?

await prisma.user.update({
    where: { id: 1 },
    data: { posts: { update: { where: { id: 2 }, data: { title: "Nuevo Título" } } } }
});

69. ¿Cómo manejar estados de conexión en Prisma?

const prisma = new PrismaClient();
prisma.$connect();

process.on('beforeExit', async () => {
    await prisma.$disconnect();
});

70. ¿Cómo ejecutar consultas sin cache en Prisma?

const freshUser = await prisma.user.findUnique({
    where: { id: 1 },
    rejectOnNotFound: true
});

120 Preguntas sobre Prisma

71. ¿Cómo eliminar múltiples registros en Prisma?

await prisma.user.deleteMany({
    where: { role: "inactive" }
});

72. ¿Cómo utilizar `findFirst` en Prisma?

const user = await prisma.user.findFirst({
    where: { email: { endsWith: "@gmail.com" } }
});

73. ¿Cómo ordenar los resultados en Prisma?

const users = await prisma.user.findMany({
    orderBy: { name: "asc" }
});

74. ¿Cómo hacer un `count` en Prisma?

const totalUsers = await prisma.user.count();

75. ¿Cómo realizar una consulta `distinct` en Prisma?

const users = await prisma.user.findMany({
    distinct: ["role"]
});

76. ¿Cómo hacer una consulta con `not` en Prisma?

const users = await prisma.user.findMany({
    where: { role: { not: "admin" } }
});

77. ¿Cómo utilizar `upsert` en Prisma?

const user = await prisma.user.upsert({
    where: { email: "user@example.com" },
    update: { lastLogin: new Date() },
    create: { name: "User", email: "user@example.com" }
});

78. ¿Cómo paginar resultados en Prisma?

const users = await prisma.user.findMany({
    skip: 10,
    take: 5
});

79. ¿Cómo realizar una consulta anidada con `select` en Prisma?

const user = await prisma.user.findUnique({
    where: { id: 1 },
    select: { name: true, posts: { select: { title: true } } }
});

80. ¿Cómo verificar si un registro existe en Prisma?

const exists = await prisma.user.findUnique({
    where: { email: "test@example.com" }
}) !== null;

120 Preguntas sobre Prisma

81. ¿Cómo actualizar múltiples registros en Prisma?

await prisma.user.updateMany({
    where: { active: false },
    data: { active: true }
});

82. ¿Cómo eliminar todos los registros de una tabla en Prisma?

await prisma.user.deleteMany({});

83. ¿Cómo hacer una consulta con `in` en Prisma?

const users = await prisma.user.findMany({
    where: { id: { in: [1, 2, 3] } }
});

84. ¿Cómo hacer una consulta con `contains` en Prisma?

const users = await prisma.user.findMany({
    where: { name: { contains: "John" } }
});

85. ¿Cómo realizar una consulta con `startsWith` en Prisma?

const users = await prisma.user.findMany({
    where: { email: { startsWith: "admin@" } }
});

86. ¿Cómo hacer una consulta con `endsWith` en Prisma?

const users = await prisma.user.findMany({
    where: { email: { endsWith: "@gmail.com" } }
});

87. ¿Cómo hacer una consulta con múltiples condiciones en Prisma?

const users = await prisma.user.findMany({
    where: {
        AND: [
            { role: "admin" },
            { active: true }
        ]
    }
});

88. ¿Cómo usar `OR` en Prisma?

const users = await prisma.user.findMany({
    where: {
        OR: [
            { role: "admin" },
            { role: "editor" }
        ]
    }
});

89. ¿Cómo excluir registros con `NOT` en Prisma?

const users = await prisma.user.findMany({
    where: { NOT: { role: "guest" } }
});

90. ¿Cómo contar registros con condiciones en Prisma?

const activeUsers = await prisma.user.count({
    where: { active: true }
});

 

120 Preguntas sobre Prisma

91. ¿Cómo realizar una transacción en Prisma?

await prisma.$transaction([
    prisma.user.create({ data: { name: "John" } }),
    prisma.post.create({ data: { title: "Post de John", authorId: 1 } })
]);

92. ¿Cómo hacer una consulta con `distinct` en Prisma?

const users = await prisma.user.findMany({
    distinct: ["email"]
});

93. ¿Cómo usar `groupBy` en Prisma?

const groupedUsers = await prisma.user.groupBy({
    by: ["role"],
    _count: { id: true }
});

94. ¿Cómo actualizar un campo solo si cumple una condición en Prisma?

await prisma.user.updateMany({
    where: { active: false },
    data: { active: true }
});

95. ¿Cómo realizar una consulta `aggregate` en Prisma?

const stats = await prisma.user.aggregate({
    _avg: { age: true },
    _sum: { age: true },
    _max: { age: true }
});

96. ¿Cómo validar datos antes de insertarlos en Prisma?

if (!email.includes("@")) {
    throw new Error("Email inválido");
}
const user = await prisma.user.create({ data: { email } });

97. ¿Cómo manejar errores en Prisma?

try {
    const user = await prisma.user.create({ data: { email: "invalid" } });
} catch (error) {
    console.error("Error al crear usuario", error);
}

98. ¿Cómo realizar una consulta con `select` en Prisma?

const user = await prisma.user.findUnique({
    where: { id: 1 },
    select: { name: true, email: true }
});

99. ¿Cómo obtener solo ciertos campos de una consulta en Prisma?

const users = await prisma.user.findMany({
    select: { name: true, email: true }
});

100. ¿Cómo manejar conexiones de base de datos en Prisma?

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