Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/salpagarov/lunex
Lunex Project
https://github.com/salpagarov/lunex
lua orm
Last synced: about 2 hours ago
JSON representation
Lunex Project
- Host: GitHub
- URL: https://github.com/salpagarov/lunex
- Owner: salpagarov
- License: mit
- Created: 2017-12-09T17:59:23.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-12-29T01:48:36.000Z (10 months ago)
- Last Synced: 2024-05-27T15:50:39.818Z (5 months ago)
- Topics: lua, orm
- Language: Lua
- Homepage:
- Size: 9.77 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DBI v0.1
Простой и быстрый интерфейс к базам данных SQL
## Пример использования
````lua
local db = require "DBI" ({
driver = "MySQL", -- имя файла DBD
connection = { -- настройки подключения к серверу базы данных
hostname = "localhost",
database = "lunex",
username = "user",
password = "p@ssw0rd",
codepage = "utf8"
},
scheme = { -- описание таблиц, типов данных и реляционных связей базы данных
user = {
id = "number", name = "string", password = "string", group = "group:id"
},
group = {
id = "number", name = "string"
}
}
})
users = db.user:limit(100):offset(0):orderBy("name"):get({group = {name = "Admin"}})
for _,u in pairs(users) do
print (u.name .. ':' .. u.password)
end
````
## Драйвер базы данных (DBD)Файл с таблицей, содержащей функции `query`, `state` и `fetch`.
Реализация этих функций зависит от базы данных и используемых низкоуровневых библиотек.## Настройки подключения
Таблица с данными, которые нужны драйверу для того, чтобы подключиться к серверу базы данных. Структура таблицы зависит от базы данных и соглашений DBD.
В примере используются соглашения драйвера `MySQL`.
## Схема
Схема отражает структуру базы данных - имена таблиц, имена колонок и их тип, реляционные связи. Если в качестве типа указана связка `таблица:колонка`, то это означает связь "много-к-одному".
**Не создавайте реляционные связи внутри одной таблицы, работать с деревьями модуль еще не умеет!**
# CRUD
## add
````lua
db.group:add({name = "Admin"})
db.user:add({name = "root", group = {name = "Admin"}})
````
Метод add конструирует и выполняет SQL-конструкцию INSERT.Если схема предусматривает вложенный реляционный объект, в конструкцию INSERT вкладывается соответствующий SELECT.
**Все вложенные объекты должны существовать на момент выполнения операции, автоматически они не создаются.**
## get
````lua
users = db.user:limit(100):offset(0):orderBy("name"):get({group = {name = "Admin"}})
print (users[1].group.name) --> "Admin"
````
Метод формирует и выполняет конструкцию SELECT.Возвращается массив (таблицу и натуральными числовыми ключами) из записей. Если поле записи ссылается на запись в другой таблице, то оно становится вложенной таблицей.
Дополнительные методы limit, offset, orderBy, orderByDesc и where дополняют запрос соответствующими конструкциями. **Они могут следовать в любом порядке, но должны находиться перед :get**
## put
````lua
db.user:where('name = "root"'):put({password = "r00t"})
````
Конструирует и выполняет SQL-конструкцию UPDATE.**Без указания `where` изменения будут выполнены для всех записей таблицы.**
## del
````lua
db.user:del({group = {name = "Guest"}})
db.user:where('name = "root"'):del()
````
Метод конструирует и выполняет конструкцию DELETE FROM.**Внимание: если передать методу пустую таблицу и не задать :where - будут удалены все записи.**