Вывод таблицы SQL через скрипт LUA

Мне нужна помощь по сценарию LUA, который должен выводить результаты таблицы в читаемом формате.

Этот скрипт просто выводит результаты в виде ссылки на таблицу:

database.open("provider=nis;database=nis;driver=none")

query = database.query("SELECT distinct cmcs.name, ms.schedule_name, mw.start_time, mw.end_time from MAINTENANCE_WINDOW mw INNER JOIN CM_DEVICE cmd on mw.dev_id = cmd.dev_id INNER JOIN CM_COMPUTER_SYSTEM cmcs on cmcs.cs_id = cmd.cs_id INNER JOIN MAINTENANCE_SCHEDULE ms on mw.schedule_id = ms.schedule_id where mw.end_time > GETDATE();")

print (query)

Результат выше:

table:0x7fe8f40e6f00

У меня есть следующий сценарий, но он не выводит то, что я ожидал увидеть:

database.open("provider=nis;database=nis;driver=none")

query = database.query("SELECT distinct cmcs.name, ms.schedule_name, mw.start_time, mw.end_time from MAINTENANCE_WINDOW mw INNER JOIN CM_DEVICE cmd on mw.dev_id = cmd.dev_id INNER JOIN CM_COMPUTER_SYSTEM cmcs on cmcs.cs_id = cmd.cs_id INNER JOIN MAINTENANCE_SCHEDULE ms on mw.schedule_id = ms.schedule_id where mw.end_time > GETDATE();")

if query == nil then
   print ("Query did not complete, or had no results")
else
   for idx,row in pairs (query) do
      printf("Hostname: %s \t IP: %s",row['name'],row['schedule_name'])
   end 
end

Вот снимок экрана с выходными данными SQL при запуске на самом SQL Server (если есть какие-либо выходные данные):

Вывод таблицы SQL через скрипт LUA

printf не является функцией lua.
hjpotter92 19.11.2018 16:07

Какую библиотеку вы используете? Если библиотека возвращает таблицу, вам придется перебрать пары ключ-значение и отформатировать ее в желаемый результат, как в приведенном вами примере. Вы также можете использовать некоторую библиотеку сериализации, такую ​​как serpent, для вывода таблицы, не просматривая ее вручную.

Rok 19.11.2018 18:46

Вы можете скачать библиотеку для печати таблиц. Я использую inspect.lua.

cyclaminist 19.11.2018 20:55
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
1 061
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Понятно:

database.open("provider=nis;database=nis;driver=none")

function tdump(t)
       local function dmp(t, l, k)
     if type(t) == "table" then
       print(string.format("%s%s:", string.rep(" ", l*2), tostring(k)))
       for k, v in pairs(t) do
         dmp(v, l+1, k)
       end
     else
       print(string.format("%s%s:%s", string.rep(" ", l*2), tostring(k), tostring(t)))
     end
   end
 dmp(t, 1, "Maintenance Monitor")
         end 



--To OUTFILE
query = database.query("SELECT distinct cmcs.name, ms.schedule_name, mw.start_time, mw.end_time from MAINTENANCE_WINDOW mw INNER JOIN CM_DEVICE cmd on mw.dev_id = cmd.dev_id INNER JOIN CM_COMPUTER_SYSTEM cmcs on cmcs.cs_id = cmd.cs_id INNER JOIN MAINTENANCE_SCHEDULE ms on mw.schedule_id = ms.schedule_id where mw.end_time > GETDATE() INTO OUTFILE '/tmp/Maintenance.txt';")

tdump(query)

Надеюсь, это поможет другим!

Другие вопросы по теме