Prisma
- https://www.prisma.io/
- Open source Node.js and TypeScript ORM
- readable data model
- automated migrations
- type-safety
- auto-completion
Install
npm i prisma -D
npm i @prisma/client
.env
DATABASE_URL="mysql://devuser:devpass@localhost:3306/devdb"
prisma.schema
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"
}
npx prisma migrate dev --name init
Run
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);
});
node index.js
ref