Why You Should Use Prisma ORM in Your Next Project

Hey everyone! If you’ve ever built an application—whether it’s a web app, Android app, or desktop app—you’ve likely needed a database. Gone are the days when developers wrote raw SQL queries manually and worked directly with database connectors. Instead, Object-Relational Mappers (ORMs) and Object-Document Mappers (ODMs) have taken over, making database interactions much more efficient and maintainable.

In my search for the best ORM, I came across Prisma, and I must say—it’s one of the best! Before choosing Prisma, I explored SQLAlchemy and a few others, but they weren’t as flexible. One major downside of SQLAlchemy is that you need to define data models and data classes manually. Plus, dynamically adding new fields at runtime isn’t straightforward. That’s where Prisma shines!

Why Choose Prisma? 🤔

Automatic Model Generation – Define your schema once, and Prisma takes care of the rest. No need to manually create model classes.
Multi-Language Support – Works seamlessly with Node.js, Next.js, Python (FastAPI, Django, Flask), and more.
Type Safety – Provides full TypeScript support for safer queries.
Flexible and Scalable – Prisma is not just an ORM; it acts as a database toolkit supporting migrations, queries, and relations.
Great Performance – Optimized for modern databases like PostgreSQL, MySQL, SQLite, and MongoDB.

I’ve personally used Prisma with Python (FastAPI backend) and Next.js backend, and it was an amazing experience!


Setting Up Prisma with Next.js

Let’s go through the basic setup for a Next.js + Prisma + PostgreSQL project.

Step 1: Install Dependencies

npm <span>install</span> @prisma/client
npm <span>install</span> <span>--save-dev</span> prisma
npm <span>install</span> @prisma/client
npm <span>install</span> <span>--save-dev</span> prisma
npm install @prisma/client npm install --save-dev prisma

Enter fullscreen mode Exit fullscreen mode

Step 2: Initialize Prisma

npx prisma init
npx prisma init
npx prisma init

Enter fullscreen mode Exit fullscreen mode

This will create a prisma/schema.prisma file where you can define your database schema.

Step 3: Define Your Schema

Edit the prisma/schema.prisma file to define your models:

model User {
id Int @id @default(autoincrement())
name String
email String @unique
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
author User @relation(fields: [authorId], references: [id])
authorId Int
}
model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
  posts Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  author    User    @relation(fields: [authorId], references: [id])
  authorId  Int
}
model User { id Int @id @default(autoincrement()) name String email String @unique posts Post[] } model Post { id Int @id @default(autoincrement()) title String content String? author User @relation(fields: [authorId], references: [id]) authorId Int }

Enter fullscreen mode Exit fullscreen mode

Step 4: Run Migrations

npx prisma migrate dev <span>--name</span> init
npx prisma migrate dev <span>--name</span> init
npx prisma migrate dev --name init

Enter fullscreen mode Exit fullscreen mode

Step 5: Use Prisma in Your API

Create a file lib/prisma.ts:

<span>import</span> <span>{</span> <span>PrismaClient</span> <span>}</span> <span>from</span> <span>'</span><span>@prisma/client</span><span>'</span><span>;</span>
<span>const</span> <span>prisma</span> <span>=</span> <span>new</span> <span>PrismaClient</span><span>();</span>
<span>export</span> <span>default</span> <span>prisma</span><span>;</span>
<span>import</span> <span>{</span> <span>PrismaClient</span> <span>}</span> <span>from</span> <span>'</span><span>@prisma/client</span><span>'</span><span>;</span>

<span>const</span> <span>prisma</span> <span>=</span> <span>new</span> <span>PrismaClient</span><span>();</span>
<span>export</span> <span>default</span> <span>prisma</span><span>;</span>
import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); export default prisma;

Enter fullscreen mode Exit fullscreen mode

Use it in an API route:

<span>import</span> <span>prisma</span> <span>from</span> <span>'</span><span>../../lib/prisma</span><span>'</span><span>;</span>
<span>export</span> <span>default</span> <span>async</span> <span>function</span> <span>handler</span><span>(</span><span>req</span><span>,</span> <span>res</span><span>)</span> <span>{</span>
<span>const</span> <span>users</span> <span>=</span> <span>await</span> <span>prisma</span><span>.</span><span>user</span><span>.</span><span>findMany</span><span>();</span>
<span>res</span><span>.</span><span>json</span><span>(</span><span>users</span><span>);</span>
<span>}</span>
<span>import</span> <span>prisma</span> <span>from</span> <span>'</span><span>../../lib/prisma</span><span>'</span><span>;</span>

<span>export</span> <span>default</span> <span>async</span> <span>function</span> <span>handler</span><span>(</span><span>req</span><span>,</span> <span>res</span><span>)</span> <span>{</span>
  <span>const</span> <span>users</span> <span>=</span> <span>await</span> <span>prisma</span><span>.</span><span>user</span><span>.</span><span>findMany</span><span>();</span>
  <span>res</span><span>.</span><span>json</span><span>(</span><span>users</span><span>);</span>
<span>}</span>
import prisma from '../../lib/prisma'; export default async function handler(req, res) { const users = await prisma.user.findMany(); res.json(users); }

Enter fullscreen mode Exit fullscreen mode


Setting Up Prisma with FastAPI

Step 1: Install Prisma for Python

pip <span>install </span>prisma
pip <span>install </span>prisma
pip install prisma

Enter fullscreen mode Exit fullscreen mode

Step 2: Initialize Prisma in Your FastAPI Project

prisma init
prisma init
prisma init

Enter fullscreen mode Exit fullscreen mode

Step 3: Define Your Schema (prisma/schema.prisma)

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

Enter fullscreen mode Exit fullscreen mode

Step 4: Generate Prisma Client

prisma generate
prisma generate
prisma generate

Enter fullscreen mode Exit fullscreen mode

Step 5: Use Prisma in FastAPI

<span>from</span> <span>prisma</span> <span>import</span> <span>Client</span>
<span>from</span> <span>fastapi</span> <span>import</span> <span>FastAPI</span>
<span>app</span> <span>=</span> <span>FastAPI</span><span>()</span>
<span>prisma</span> <span>=</span> <span>Client</span><span>()</span>
<span>@app.get</span><span>(</span><span>"</span><span>/users</span><span>"</span><span>)</span>
<span>async</span> <span>def</span> <span>get_users</span><span>():</span>
<span>if</span> <span>not</span> <span>db</span><span>.</span><span>is_connected</span><span>():</span>
<span>await</span> <span>db</span><span>.</span><span>connect</span><span>()</span>
<span>users</span> <span>=</span> <span>await</span> <span>prisma</span><span>.</span><span>user</span><span>.</span><span>find_many</span><span>()</span>
<span>return</span> <span>users</span>
<span>from</span> <span>prisma</span> <span>import</span> <span>Client</span>
<span>from</span> <span>fastapi</span> <span>import</span> <span>FastAPI</span>

<span>app</span> <span>=</span> <span>FastAPI</span><span>()</span>
<span>prisma</span> <span>=</span> <span>Client</span><span>()</span>

<span>@app.get</span><span>(</span><span>"</span><span>/users</span><span>"</span><span>)</span>
<span>async</span> <span>def</span> <span>get_users</span><span>():</span>
    <span>if</span> <span>not</span> <span>db</span><span>.</span><span>is_connected</span><span>():</span>
        <span>await</span> <span>db</span><span>.</span><span>connect</span><span>()</span>

    <span>users</span> <span>=</span> <span>await</span> <span>prisma</span><span>.</span><span>user</span><span>.</span><span>find_many</span><span>()</span>
    <span>return</span> <span>users</span>
from prisma import Client from fastapi import FastAPI app = FastAPI() prisma = Client() @app.get("/users") async def get_users(): if not db.is_connected(): await db.connect() users = await prisma.user.find_many() return users

Enter fullscreen mode Exit fullscreen mode


Conclusion

If you’re looking for an ORM that is flexible, efficient, and easy to use, Prisma is a fantastic choice! It works seamlessly with both JavaScript/TypeScript and Python, making it a great fit for full-stack applications.

Give Prisma a try in your next project and let me know your thoughts! Have you used any other ORMs that you liked? Drop a comment below!

原文链接:Why You Should Use Prisma ORM in Your Next Project

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
The best way out is always through.
一路走到底,你就会发现那个最佳出口
评论 抢沙发

请登录后发表评论

    暂无评论内容