Prisma 是一個開源的現代化的 TypeScript/JavaScript ORM(Object-Relational Mapping),專注於簡化與資料庫的互動。
讓開發者可以用比較直觀的方式,以操作物件的寫法來存取資料庫,用原生語言的寫法來取代複雜的SQL query,減少開發的複雜度,同時還能避免SQL injection。 然而,ORM也並非是無所不能,在以下狀況下也許使用原生SQL會是更適合的做法:
目前專案剛使用Prisma沒多久真心覺得開發體驗非常好,使用Prisma的優點如下:
schema.prisma
產生TypeScript型別,所有查詢、輸入、輸出都有完整型別檢查。Fully typed帶來的自動補全也可以大幅減低翻閱文檔的時間。Prisma Studio
也是非常好用的工具,可以直接用npx指令開啟gui方便操作資料庫。npx prisma migrate
指令建立SQL migration,方便多人協作與版控。PostgreSQL
, MySQL
, MariaDB
, SQL Server
, SQLite
, MongoDB
以及 CockroachDB
。$queryRaw
語法撰寫原生SQL query。首先準備好一個node.js專案,不論要用express、next還是什麼方式起專案都可以,只要確保node.js版本有符合官方需求就好。
# install prisma CLI & prisma client
npm install prisma --save-dev
npm install @prisma/client
# create schema.prisma under prisma folder
npx prisma init
編輯schema.prisma
檔案
// prisma/schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
接著在根目錄創建.env
並設置環境變數
# .env
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
以下為官方範例,model name對應到SQL table name。
// prisma/schema.prisma
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?
}
# with migration
npx prisma migrate dev
# or without migration
npx prisma db push
prisma會依你本地的schema.prisma
在node_modules
建立prisma client,型別會紀錄在裡面因此我們使用prisma client時能夠獲得typescript型別支援。
npx prisma db pull
# or
npx prisma db generate
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
// query
const allUsers = await prisma.user.findMany()
console.log(allUsers)
// create
await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: { title: 'Hello World' },
},
profile: {
create: { bio: 'I like turtles' },
},
},
})
可以透過以下指令開啟prisma studio,該指令會透過.env
內設定的database URL連線到你的DB。
npx prisma studio
我們可以在GUI上訪問我們的資料庫,並進行新增編輯等操作。
只會用到簡單的CRUD的話甚至都不需要自己寫後台了,直接使用prisma studio就好!