# Prisma - https://www.prisma.io/ - Open source Node.js and TypeScript ORM - readable data model - automated migrations - type-safety - auto-completion ## Install ```sh npm i prisma -D npm i @prisma/client ``` ## .env ```sh DATABASE_URL="mysql://devuser:devpass@localhost:3306/devdb" ``` ## prisma.schema ```sh datasource db { provider = "mysql" url = env("DATABASE_URL") } model Post { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt title String @db.VarChar(255) content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId Int } 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()) email String @unique name String? posts Post[] profile Profile? } generator client { provider = "prisma-client-js" } ``` ```sh npx prisma migrate dev --name init ``` ## Run ```js const { PrismaClient } = require("@prisma/client"); const prisma = new PrismaClient(); async function main() { await prisma.user.create({ data: { name: "Alice", email: "alice@prisma.io", posts: { create: { title: "Hello World" }, }, profile: { create: { bio: "I like turtles" }, }, }, }); const allUsers = await prisma.user.findMany({ include: { posts: true, profile: true, }, }); console.dir(allUsers, { depth: null }); } async function update() { const post = await prisma.post.update({ where: { id: 1 }, data: { published: true }, }); console.log(post); } main() .then(async () => { await prisma.$disconnect(); }) .catch(async (e) => { console.error(e); await prisma.$disconnect(); process.exit(1); }); ``` ```sh node index.js ``` ## ref - https://www.prisma.io/docs/orm/prisma-client