Prisma — это ORM нового поколения для Node.js и TypeScript. После более чем двух лет разработки мы рады сообщить, что все инструменты Prisma готовы к эксплуатации в production!

Prisma — это ORM нового поколения с открытым исходным кодом для Node.js и TypeScript. Она состоит из следующих инструментов:

Эти инструменты можно использовать вместе или по отдельности в любом проекте на Node.js или TypeScript. В настоящее время Prisma поддерживает PostgreSQL, MySQL, SQLite, SQL Server, MongoDB.
Работа с базами данных — одна из самых сложных областей разработки приложений. Моделирование данных, миграция схем и написание запросов к базе данных — это задачи, с которыми разработчики приложений сталкиваются каждый день.
В Prisma мы обнаружили, что экосистема Node.js — хотя и становится все более популярной для создания приложений с поддержкой баз данных — не предоставляет разработчикам приложений современных инструментов для решения этих задач.
Поскольку инструменты становятся более специализированными, разработчики приложений должны иметь возможность сосредоточиться на реализации функций, приносящих пользу их бизнесу, вместо того чтобы тратить время на соединение слоев приложения путем написания программного кода.
Хотя Prisma решает те же проблемы, что и традиционные ORM, ее подход к решению этих проблем принципиально отличается.
При использовании Prisma вы определяете свою модель данных в Prisma schema. Вот пример того, как выглядят ваши модели:
Каждая из этих моделей описывает таблицу в соответствующей базе данных и служит основой для сгенерированного доступа к данным с API, предоставляемого Prisma Client. В VS Code расширение Prisma предоставляет подсветку синтаксиса, автодополнение, быстрые исправления и множество других возможностей, чтобы сделать моделирование данных волшебным и приятным занятием ✨.
Prisma Migrate преобразует Prisma schema в SQL, необходимый для создания и изменения таблиц в вашей базе данных. Его можно запустить команду prisma migrate из API Prisma CLI.
Хотя код SQL генерируется автоматически на основе Prisma schema, вы можете легко изменить его в соответствии с вашими конкретными требованиями. Благодаря такому подходу Prisma Migrate обеспечивает оптимальный баланс между повышением продуктивности и возможностью контроля.
Основным преимуществом работы с Prisma Client является то, что он позволяет разработчикам мыслить объектами и поэтому предлагает привычный и естественный способ рассуждать о своих данных.
В Prisma Client нет концепции экземпляров модели. Вместо этого он помогает сформировать запросы к базе данных, которые всегда возвращают простые объекты JavaScript. Благодаря генерируемым типам вы получаете автозаполнение и для этих запросов.
Также в качестве бонуса для разработчиков TypeScript: Все результаты запросов Prisma Client полностью типизированы. Фактически, Prisma обеспечивает самые сильные гарантии безопасности типов среди всех ORM на TypeScript (сравнение безопасности типов с TypeORM можно прочитать здесь).
Prisma также поставляется с современным интерфейсом администратора для вашей базы данных — вспомните phpMyAdmin, но в 2021 году ?.

Prisma не привязывается к приложениям, которые вы создаете, и прекрасно дополнит ваш стек, независимо от того, какие технологии вы предпочитаете. Вы можете узнать больше о том, как Prisma работает с вашим любимым фреймворком или библиотекой здесь:
Если вы хотите изучить Prisma с использованием этих или других технологий, вы можете ознакомиться с нашими готовыми примерами:
За последние три года Prisma претерпела значительные изменения, и мы невероятно рады поделиться результатами с сообществом разработчиков.
За последние годы, с тех пор как мы начали создавать инструменты для разработчиков, мы как компания прошли через ряд крупных итераций и поворотов продукта:

Prisma — это результат опыта, который мы приобрели, будучи одним из первых новаторов в экосистеме GraphQL, и наших знаний о слоях данных компаний всех размеров, от небольших стартапов до крупных предприятий.
Используемая тысячами компаний с момента первого выпуска три года назад, Prisma прошла боевые испытания и готова к эксплуатации в критически важных приложениях.
Prisma разрабатывается в открытом режиме. Наши команды разработчиков продуктов и инженеров отслеживают проблемы на GitHub и обычно отвечают на них в течение 24 часов после открытия проблемы.
Новые релизы выпускаются каждые две недели и содержат новые функции, исправления ошибок и множество улучшений. После каждого выпуска мы проводим прямую трансляцию на Youtube, чтобы представить новые функции и получить отзывы от нашего сообщества.
Мы также стараемся помочь разработчикам, где бы они ни поднимали вопросы о Prisma, будь то в Slack, GitHub Discussions или Stackoverflow, через специальную команду поддержки сообщества.
Наше сообщество представлено в цифрах:
Если вы хотите узнать обо всех замечательных событиях, которые произошли в 2021 году, ознакомьтесь с этой статьей в блоге: Что нового в Prisma? (Q1/21)
Мы были рады видеть, как Prisma помогла компаниям всех размеров стать более продуктивными и быстрее выпускать продукцию.
На протяжении всего нашего пути такие компании, как Adidas, HyreCar, Agora Systems, Labelbox и многие другие, предоставляли нам ценный вклад в развитие нашего продукта. Мы имели удовольствие работать с некоторыми из самых инновационных и изобретательных технологических лидеров, таких как:
Если вы хотите узнать, как Prisma помогла этим компаниям стать более продуктивными, ознакомьтесь с этими ресурсами:
Лучшие инструменты разработчика — это те, которые выходят за пределы ваших возможностей и легко адаптируются с ростом сложности проекта. Именно так мы разработали Prisma.

Prisma имеет встроенные процессы для всех этапов жизненного цикла разработки, от создания прототипов, разработки, развертывания, CI/CD, тестирования и т.д. Ознакомьтесь с нашей документацией и статьями, чтобы узнать об этих процессах и о том, как их реализовать с Prisma.
Нам особенно приятно, что многие авторы фреймворков и библиотек выбирают Prisma в качестве ORM по умолчанию для своих инструментов. Вот подборка фреймворков более высокого уровня, использующих Prisma:
Мы являемся компанией с венчурным финансированием и командой, которая страстно желает улучшить жизнь разработчиков приложений. Хотя мы начинаем свой путь с создания инструментов с открытым исходным кодом, наше долгосрочное видение Prisma намного больше, чем создание «просто» ORM.
Во время недавнего мероприятия Enterprise Event и встречи Prisma Meetup мы начали делиться этим видением, которое мы называем Application Data Platform.
Эта идея во многом вдохновлена такими компаниями, как Facebook, Twitter и Airbnb, которые создали пользовательские уровни доступа к данным поверх своих баз данных и других источников данных, чтобы облегчить разработчикам приложений безопасный и эффективный доступ к необходимым им данным.
Цель Prisma — демократизировать идею этого пользовательского слоя доступа к данным и сделать его доступным для команд разработчиков и организаций любого размера.
Мы будем рады помочь вам создать ваш следующий проект с Prisma! Чтобы узнать больше о нашем предложении для предприятий и о том, как Prisma впишется в ваш стек и видение, свяжитесь с нами.
Существуют различные способы начать работу с Prisma:
Сообщество было невероятно важно для нас с самого начала нашей работы. От проведения встреч и конференций до помощи пользователям на Slack и GitHub Discussions мы всегда стараемся быть в тесном контакте с сообществом разработчиков. Присоединяйтесь к нам!

Содержание
- Новая парадигма объектно-реляционного отображения
- Готовность к эксплуатации в критически важных приложениях
- Prisma может быть использовано в любом стеке
- Открытый исходный код и не только
- Как мы можем вам помочь?
- Начало работы с Prisma
- Приходите ради ORM, оставайтесь ради сообщества ?
Новая парадигма для объектно-реляционного отображения
Prisma — это ORM нового поколения с открытым исходным кодом для Node.js и TypeScript. Она состоит из следующих инструментов:
- Prisma Client: Автогенерируемый и типобезопасный клиент базы данных
- Prisma Migrate: Декларативное моделирование данных и миграции с возможностью пользовательского редактирования
- Prisma Studio: Современный пользовательский интерфейс для просмотра и редактирования данных

Эти инструменты можно использовать вместе или по отдельности в любом проекте на Node.js или TypeScript. В настоящее время Prisma поддерживает PostgreSQL, MySQL, SQLite, SQL Server, MongoDB.
Базы данных — это сложно
Работа с базами данных — одна из самых сложных областей разработки приложений. Моделирование данных, миграция схем и написание запросов к базе данных — это задачи, с которыми разработчики приложений сталкиваются каждый день.
В Prisma мы обнаружили, что экосистема Node.js — хотя и становится все более популярной для создания приложений с поддержкой баз данных — не предоставляет разработчикам приложений современных инструментов для решения этих задач.
Разработчики приложений должны думать о данных, а не о SQL
Поскольку инструменты становятся более специализированными, разработчики приложений должны иметь возможность сосредоточиться на реализации функций, приносящих пользу их бизнесу, вместо того чтобы тратить время на соединение слоев приложения путем написания программного кода.
Prisma — полноценный ORM для Node.js и TypeScript
Хотя Prisma решает те же проблемы, что и традиционные ORM, ее подход к решению этих проблем принципиально отличается.
Моделирование данных в Prisma schema
При использовании Prisma вы определяете свою модель данных в Prisma schema. Вот пример того, как выглядят ваши модели:
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
Каждая из этих моделей описывает таблицу в соответствующей базе данных и служит основой для сгенерированного доступа к данным с API, предоставляемого Prisma Client. В VS Code расширение Prisma предоставляет подсветку синтаксиса, автодополнение, быстрые исправления и множество других возможностей, чтобы сделать моделирование данных волшебным и приятным занятием ✨.
Подробнее о Prisma schema
Миграция баз данных с Prisma Migrate
Prisma Migrate преобразует Prisma schema в SQL, необходимый для создания и изменения таблиц в вашей базе данных. Его можно запустить команду prisma migrate из API Prisma CLI.
Разверните, чтобы просмотреть сгенерированный SQL для вышеуказанных моделей
PostgreSQL
CREATE TABLE "Post" (
"id" SERIAL NOT NULL,
"title" TEXT NOT NULL,
"content" TEXT,
"published" BOOLEAN NOT NULL DEFAULT false,
"authorId" INTEGER,
PRIMARY KEY ("id")
);
CREATE TABLE "User" (
"id" SERIAL NOT NULL,
"email" TEXT NOT NULL,
"name" TEXT,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "User.email_unique" ON "User"("email");
ALTER TABLE "Post" ADD FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
MySQL
CREATE TABLE `Post` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`title` VARCHAR(191) NOT NULL,
`content` VARCHAR(191),
`published` BOOLEAN NOT NULL DEFAULT false,
`authorId` INTEGER,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE `User` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`email` VARCHAR(191) NOT NULL,
`name` VARCHAR(191),
UNIQUE INDEX `User.email_unique`(`email`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `Post` ADD FOREIGN KEY (`authorId`) REFERENCES `User`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
SQLite
CREATE TABLE "Post" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"title" TEXT NOT NULL,
"content" TEXT,
"published" BOOLEAN NOT NULL DEFAULT false,
"authorId" INTEGER,
FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE "User" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"email" TEXT NOT NULL,
"name" TEXT
);
CREATE UNIQUE INDEX "User.email_unique" ON "User"("email");
SQL Server
CREATE TABLE [dbo].[Post] (
[id] INT NOT NULL IDENTITY(1,1),
[title] NVARCHAR(1000) NOT NULL,
[content] NVARCHAR(1000),
[published] BIT NOT NULL CONSTRAINT [DF__Post__published] DEFAULT 0,
[authorId] INT,
CONSTRAINT [PK__Post__id] PRIMARY KEY ([id])
);
CREATE TABLE [dbo].[User] (
[id] INT NOT NULL IDENTITY(1,1),
[email] NVARCHAR(1000) NOT NULL,
[name] NVARCHAR(1000),
CONSTRAINT [PK__User__id] PRIMARY KEY ([id]),
CONSTRAINT [User_email_unique] UNIQUE ([email])
);
ALTER TABLE [dbo].[Post] ADD CONSTRAINT [FK__Post__authorId] FOREIGN KEY ([authorId]) REFERENCES [dbo].[User]([id]) ON DELETE SET NULL ON UPDATE CASCADE;
Хотя код SQL генерируется автоматически на основе Prisma schema, вы можете легко изменить его в соответствии с вашими конкретными требованиями. Благодаря такому подходу Prisma Migrate обеспечивает оптимальный баланс между повышением продуктивности и возможностью контроля.
Подробнее о Prisma Migrate
Интуитивно понятный и типобезопасный способ работы с базой данных с Prisma Client
Основным преимуществом работы с Prisma Client является то, что он позволяет разработчикам мыслить объектами и поэтому предлагает привычный и естественный способ рассуждать о своих данных.
В Prisma Client нет концепции экземпляров модели. Вместо этого он помогает сформировать запросы к базе данных, которые всегда возвращают простые объекты JavaScript. Благодаря генерируемым типам вы получаете автозаполнение и для этих запросов.
Также в качестве бонуса для разработчиков TypeScript: Все результаты запросов Prisma Client полностью типизированы. Фактически, Prisma обеспечивает самые сильные гарантии безопасности типов среди всех ORM на TypeScript (сравнение безопасности типов с TypeORM можно прочитать здесь).
Перейдите по вкладкам этого блока кода, чтобы изучить некоторые запросы Prisma Client
или изучите полный справочник API:
Lists
// Find all posts
const posts = await prisma.post.findMany()
Relations
// Find all posts and include their authors in the result
const postsWithAuthors = await prisma.post.findMany({
include: { author: true },
})
Nested write
// Create a new user with a new post
const userWithPosts: User = await prisma.user.create({
data: {
email: 'ada@prisma.io',
name: 'Ada Lovelace',
posts: {
create: [{ title: 'Hello World' }],
},
},
})
Filter
// Find all users with `@prisma` emails
const users = await prisma.user.findMany({
where: {
email: { contains: '@prisma' },
},
})
Fluent API
const postsByUser = await prisma.user.findUnique({ where: { email: 'ada@prisma.io' } }).posts()
Pagination
const posts = await prisma.post.findMany({
take: 5,
cursor: { id: 2 },
})
Подробнее о Prisma Client
Современный интерфейс администратора с Prisma Studio
Prisma также поставляется с современным интерфейсом администратора для вашей базы данных — вспомните phpMyAdmin, но в 2021 году ?.

Подробнее о Prisma Studio
Prisma может быть использовано в любом стеке.
Prisma не привязывается к приложениям, которые вы создаете, и прекрасно дополнит ваш стек, независимо от того, какие технологии вы предпочитаете. Вы можете узнать больше о том, как Prisma работает с вашим любимым фреймворком или библиотекой здесь:
- Самый простой способ работы с базой данных в Next.js
- Простой доступ к базе данных в серверах GraphQL
- ORM нового поколения и полностью типобезопасный ORM для NestJS
- Простой доступ к базе данных в Express-серверах
- GraphQL с базой данных еще никогда не был таким простым с Apollo и Prisma
- Идеальный ORM для разработчиков hapi
Если вы хотите изучить Prisma с использованием этих или других технологий, вы можете ознакомиться с нашими готовыми примерами:
Примеры проектов Prisma
Готовность к эксплуатации в критически важных приложениях
За последние три года Prisma претерпела значительные изменения, и мы невероятно рады поделиться результатами с сообществом разработчиков.
От GraphQL к базам данных
За последние годы, с тех пор как мы начали создавать инструменты для разработчиков, мы как компания прошли через ряд крупных итераций и поворотов продукта:

Prisma — это результат опыта, который мы приобрели, будучи одним из первых новаторов в экосистеме GraphQL, и наших знаний о слоях данных компаний всех размеров, от небольших стартапов до крупных предприятий.
Используемая тысячами компаний с момента первого выпуска три года назад, Prisma прошла боевые испытания и готова к эксплуатации в критически важных приложениях.
Мы заботимся о разработчиках
Prisma разрабатывается в открытом режиме. Наши команды разработчиков продуктов и инженеров отслеживают проблемы на GitHub и обычно отвечают на них в течение 24 часов после открытия проблемы.
Новые релизы выпускаются каждые две недели и содержат новые функции, исправления ошибок и множество улучшений. После каждого выпуска мы проводим прямую трансляцию на Youtube, чтобы представить новые функции и получить отзывы от нашего сообщества.
Мы также стараемся помочь разработчикам, где бы они ни поднимали вопросы о Prisma, будь то в Slack, GitHub Discussions или Stackoverflow, через специальную команду поддержки сообщества.
Наше сообщество представлено в цифрах:
WHAT? | HOW MANY? |
---|---|
Проблемы на GitHub, решенные с момента первоначального выпуска | > 2,5k |
Решенные запросы в службу поддержки (GitHub, Slack, Stackoverflow, ...) | > 3k |
Участники Prisma Slack | > 40k |
Соавторы GitHub по всем репозиториям | > 300 |
Звезды в GitHub | > 17k |
Отправка пакетов наклеек в 2021 году (заказать наклейки можно здесь) | > 100 |
Мероприятия для разработчиков, проведенные с 2017 года (встречи, конференции, ...) | > 50 |
Если вы хотите узнать обо всех замечательных событиях, которые произошли в 2021 году, ознакомьтесь с этой статьей в блоге: Что нового в Prisma? (Q1/21)
Компании, использующие Prisma
Мы были рады видеть, как Prisma помогла компаниям всех размеров стать более продуктивными и быстрее выпускать продукцию.
На протяжении всего нашего пути такие компании, как Adidas, HyreCar, Agora Systems, Labelbox и многие другие, предоставляли нам ценный вклад в развитие нашего продукта. Мы имели удовольствие работать с некоторыми из самых инновационных и изобретательных технологических лидеров, таких как:
Rapha
«Prisma помогает Rapha сохранять гибкость, позволяя нам оценивать варианты хранения данных, сохраняя при этом постоянный опыт разработчиков».
Tom Hutchinson – Head of Mobile
Tom Hutchinson – Head of Mobile
Grover
«Я вижу только преимущества использования Prisma как с точки зрения разработки, так и с точки зрения внедрения. Я внедрил ее в одном проекте, и теперь другие команды принимают ее органично».
Ricardo Almeida – Software Engineer
Ricardo Almeida – Software Engineer
iopool
«Поскольку мы нашли Prisma, мы решили начать рефактор для всего проекта. Мы знали, что Prisma поможет нам работать быстрее и увереннее, тем более что время на рефактор у нас было ограничено.»
Luc Matagne — Engineering Lead
Luc Matagne — Engineering Lead
Если вы хотите узнать, как Prisma помогла этим компаниям стать более продуктивными, ознакомьтесь с этими ресурсами:
- Блог: Как Prisma помогла компании Rapha управлять данными мобильных приложений
- Беседа: Prisma в Rapha (~17мин)
- Блог: Как iopool провел рефакторинг своего приложения менее чем за 6 месяцев с Prisma
- Беседа: Prisma на iopool (~15мин)
От создания прототипов до разработки и внедрения в эксплуатацию.
Лучшие инструменты разработчика — это те, которые выходят за пределы ваших возможностей и легко адаптируются с ростом сложности проекта. Именно так мы разработали Prisma.

Prisma имеет встроенные процессы для всех этапов жизненного цикла разработки, от создания прототипов, разработки, развертывания, CI/CD, тестирования и т.д. Ознакомьтесь с нашей документацией и статьями, чтобы узнать об этих процессах и о том, как их реализовать с Prisma.
Подобнее
DEVELOPMENT STAGE | LINK | RESOURCE |
---|---|---|
Plan | Data Modeling | Data Guide |
Plan | Prisma schema | Documentation |
Code | Prisma Client API | Documentation |
Test | Testing best practices with Prisma | Documentation |
Deploy | Expand and contract pattern for database migrations | Data Guide |
Deploy | Deployment guides for Prisma-based applications | Documentation |
Monitor | Best practices for monitoring apps in production | Blog |
Operate | Database troubleshooting | Data Guide |
Веб-фреймворки нового поколения строятся на основе Prisma
Нам особенно приятно, что многие авторы фреймворков и библиотек выбирают Prisma в качестве ORM по умолчанию для своих инструментов. Вот подборка фреймворков более высокого уровня, использующих Prisma:
- RedwoodJS: Fullstack фреймворк на основе React и GraphQL
- Blitz: Fullstack-фреймворк на основе Next.js
- KeystoneJS: Headless CMS
- Wasp: DSL для разработки полнофункциональных веб-приложений на основе React
- Amplication: Набор инструментов для создания полнофункциональных приложений на основе React и NestJS
Открытый исходный код и не только
Мы являемся компанией с венчурным финансированием и командой, которая страстно желает улучшить жизнь разработчиков приложений. Хотя мы начинаем свой путь с создания инструментов с открытым исходным кодом, наше долгосрочное видение Prisma намного больше, чем создание «просто» ORM.
Во время недавнего мероприятия Enterprise Event и встречи Prisma Meetup мы начали делиться этим видением, которое мы называем Application Data Platform.
Концепция Prisma заключается в демократизации пользовательского уровня доступа к данным, используемого такими компаниями, как Facebook, Twitter и Airbnb, и предоставлении его командам разработчиков и организациям любого размера.
Эта идея во многом вдохновлена такими компаниями, как Facebook, Twitter и Airbnb, которые создали пользовательские уровни доступа к данным поверх своих баз данных и других источников данных, чтобы облегчить разработчикам приложений безопасный и эффективный доступ к необходимым им данным.
Цель Prisma — демократизировать идею этого пользовательского слоя доступа к данным и сделать его доступным для команд разработчиков и организаций любого размера.
Prisma Data Platform


Custom Data Access Layer


Как мы можем вам помочь?
Мы будем рады помочь вам создать ваш следующий проект с Prisma! Чтобы узнать больше о нашем предложении для предприятий и о том, как Prisma впишется в ваш стек и видение, свяжитесь с нами.
Начало работы с Prisma
Существуют различные способы начать работу с Prisma:
Быстрый старт (5 мин)
Подробнее о том, как отправлять запросы к базе данных с Prisma Client к демонстрационной базе данных SQLite — установка не требуется!
www.prisma.io/docs/getting-started/quickstart
www.prisma.io/docs/getting-started/quickstart
Начать новый проект с нуля
Установка Prisma в существующий проект
Приходите ради ORM, оставайтесь ради сообщества ?.
Сообщество было невероятно важно для нас с самого начала нашей работы. От проведения встреч и конференций до помощи пользователям на Slack и GitHub Discussions мы всегда стараемся быть в тесном контакте с сообществом разработчиков. Присоединяйтесь к нам!