4.16M
Категория: Базы данныхБазы данных

Работа с ORM Prisma

1.

кафедра Инструментального и прикладного программного обеспечения
Работа с ORM Prisma
Для курса 4, группа М3О-417Бк-20
По направлению подготовки
09.03.03 Прикладная информатика
Институт ИТ, РТУ МИРЭА, доцент кафедры Инструментального и
прикладного программного обеспечения
Агамиров Владимир Левонович
Москва, 2022
1

2.

Настройка проекта
Инициализируем TypeScript проект
npm init -y
npm install typescript ts-node @types/node --save-dev
npx tsc –init
npm install -g ts-node
Создаем скрипт в package.json в “scripts” для запуска программы:
"start" : "npx ts-node script.ts"
Устанавливаем Prisma CLI в проект
npm install prisma --save-dev
Указываем СУБД
npx prisma init --datasource-provider postgresql
npm i @prisma/client

3.

Схема базы данных
После выполнения всех команд у вас появится папка “prisma” с файлом “shema.prisma”. В
данном файле вы будете описывать ваши таблицы и их свойства и зависимости:

4.

Пример схемы:
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id
Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}

5.

Настройка pgAdmin 4
Нажимаем ПКМ по элементу Servers и выбираем
Register->Server…
В открывшемся окне вбиваем infbezServer в поле
Name. Также выбираем «Connect now?»
Далее переходим во вкладку Connection и в
Поле Hostname/address вбиваем localhost, а в
Password указываем «1»

6.

После сохранения нажимаем ПКМ по
созданному серверу и выбираем
Create->Database
В открывшемся поле указываем имя
нашей БД как «infbezDB» и сохраняем

7.

Результатом должна быть пустая база данных

8.

Подключение проекта к БД
В папке проекта у вас должен быть файл «.env», в котором указывается вся
информация, относящаяся к подключению:
Вводим наши данные:
DATABASE_URL="postgresql://postgres:1@localhost:5432/infbezDB?schema=public"

9.

Осталось выгрузить схему наших таблиц на сервер с помощью команд в терминале:
npx prisma db push
Если вы зайдете в pgAdmin, то увидите наши таблицы:

10.

Создаем файл нашего проекта с именем «script.ts»
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const user = await prisma.user.create({
data: {
name: 'Alice',
email: '[email protected]',
},
})
console.log(user)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

11.

После запуска в БД добавиться новый пользователь по имени Alice
Проверим pgAdmin:

12.

Добавление множества элементов
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const users = await prisma.user.createMany({
data: [
{ name: 'Shamil', email: '[email protected]'},
{ name: 'Iskander', email: '[email protected]'},
{ name: 'Roman', email: '[email protected]'},
{ name: 'Alexander', email: '[email protected]' },
{ name: 'Ivan', email: '[email protected]' },
{ name: 'Prohor', email: ‘[email protected]' },
{ name: 'Nikita', email: '[email protected]' },
]
})
console.log(users)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

13.

Получение списка всех элементов:
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const users = await prisma.user.findMany()
console.log(users)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

14.

Найдем всех пользователей, у которыйх почта оканчивается на «prisma.io» и выведем
без почту и
имя без ID
async function main() {
const users = await prisma.user.findMany({
where: {
email: {
contains:'%@prisma.io'
},
},
select: { //выбираем что выводить
email: true,
name: true,
},
})
const sasha = await prisma.user.findUnique({
where: {
email: "[email protected]",
},
select: { //выбираем что выводить
email: true,
name: true,
},
})
console.log(users)
console.log(sasha);
}

15.

Вызов «сырого» запроса, написанного на PostgreSQL:
import { PrismaClient } from '@prisma/client'
import { log } from 'console'
const prisma = new PrismaClient()
async function main() {
const user = await prisma.$queryRaw`SELECT * FROM "User" WHERE "email" LIKE '%prisma.io' AND
"name" != 'Alice'`;
console.log(user);
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

16.

Обновление одного и множества элементов:
async function main() {
const user = await prisma.user.update({
where:{
email: '[email protected]'
},
data:{
name: "Abdullaev Shamil"
}
})
const deletedUsers = await prisma.user.updateMany({
where: {
email:{
in: ['[email protected]', '[email protected]']
}
},
data:{
name: 'Student'
}
})
}
console.log(await prisma.user.findMany());

17.

Удаление одного и множества элементов:
async function main() {
const user = await prisma.user.delete({
where: { email: '[email protected]' }
})
console.log(await prisma.user.findMany());
const deletedUsers = await prisma.user.deleteMany({
where: {
email:{
in: ['[email protected]’, ‘[email protected]', '[email protected]']
}
}
})
}
console.log(await prisma.user.findMany());
English     Русский Правила