PGORM — HTML/JS ORM для PostgreSQL
Более подробно инcтрумент описан на отдельном сайте pgorm.org
PGORM - инструмент для работы с базой данных PostgreSQL непосредственно с web-страниц, позволяет подключаться, выполнять SQL-запросы, использовать ORM и получать файлы
Реализован как служба, которая принимает HTTP-запросы от браузера и возвращает ответ в зависимости от вида доступа (см. ниже). В базе данных настраивается список таблиц, которые будут отображены в классы JavaScript. Для каждой таблицы автоматически создается модуль JavaScript, который можно использовать через конструкцию import { [Table],[TableArray] } from '/orm/[Schema]/[Table].js';
Для простых систем pgorm устанавливается на сервер базы данных и используется самостоятельно, для сложных - на сервер базы данных или сервер приложений, на основном web-сервере (например, nginx) настраивается переправление запросов /pgorm/*,/orm/*.
Виды доступа
ORM | - | работа со строками таблицы базы данных PostgreSQL как с объектами JavaScript (object-relational mapping) |
SQL | - | выполнение SQL-запросов и команд, результат возвращается в формате JSON с автоприведением типов |
[GET] file | - | получение файлов (.html, .js и т.д.), включая модули JavaScript для подключения к базе данных, выполнения SQL-запросов, работы с таблицами |
Создание таблицы invoice и включение для нее объектно-реляционного отображения (ORM)
-- Создаем таблицу create table invoice( id serial primary key, date date not null default current_date, number varchar(10) not null, amount numeric(20,2) not null ); -- Включаем ORM для таблицы, JavaScript-модули создадутся автоматически call pgorm.orm_table_enable('invoice'); -- Создаем пользователя и выдаем ему права на таблицу create user user_1 login password 'user_1'; grant all on invoice,invoice_id_seq to user_1;
Создание объекта класса Invoice и сохранение его в базу данных
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>PGORM | Простой пример</title> </head> <body> <button id="buttonCreateInvoice">Создать накладную</button> <br><br> Результат <div id="result" style="border: 1px solid black; width: 500px; height: 200px;"></div> <script type="module"> // Импортируем классы подключения и таблицы Invoice из автоматически созданных модулей import { ORMConnection } from "/orm/pgorm-db.js"; import { Invoice } from "/orm/public/Invoice.js"; function createInvoice() { try { // Создаем подключение, подключаемся к базе данных и устанавливаем данное подключение по умолчанию new ORMConnection().connect('user_1', 'user_1').setDefault(); // Создаем объект класса Invoice let invoice = new Invoice(); // Устанавливаем значения полей invoice.setNumber('12/34'); invoice.setAmount(567.89); // Сохраняем объект, после сохранения автозаполняемые поля будут содержать значения invoice.save(); // Показываем объект document.getElementById("result").innerHTML = "Накладная<br><br>" + "ID: " + invoice.getID() + "<br>" + "Date: " + invoice.getDate().toISOString() + "<br>" + "Number: " + invoice.getNumber() +"<br>" + "Amount: " + invoice.getAmount(); // Отключаемся от базы данных ORMConnection.getDefault().disconnect(); } catch (exception) { // При возникновении исключения показываем его document.getElementById("result").innerHTML = "Ошибка<br><br>"+exception.message; } } document.getElementById("buttonCreateInvoice").addEventListener("click", createInvoice); </script> </body> </html>