[[ Экспорт запросов PostgreSQL в Excel файл ]]

PostgreSQLMicrosoft Excel

Экспорт запросов PostgreSQL в Excel файл

python3.x
python3-psycopg2
python3-xlsxwriter

Данная утилита сохраняет результаты SQL запроса к СУБД PostgreSQL в формат .xlsx.
Можно применять для создания: отчетов и т.п.
Каждый запрос сохраняется на отдельной странницы документа.


Установка скрипта

Сам скрипт размещен на GitHub


Настройка

Для начала работы необходимо настроить config.ini
Файл состоит из специальной секции default и секций страниц

config.ini

[default]
host = 127.0.0.1
user = USER
dbname = DATABASE
file = /tmp/1.xlsx

[Тест]
query = SELECT 1 as test;

[Пользователи]
query = SELECT
         "public".users.userid,
         "public".users."name",
         "public".users.surname
        FROM
         "public".users
        WHERE
         "public".users."name" NOT LIKE 'A';

;[page3]


Исполнение

./psql2xlsx.py -h
 
/psql2xlsx.py
[..] Page 'Тест'...
[..] Page 'Просроченные заявки'...
[OK] Workbook saved: '/tmp/1.xlsx'


Автоматизация

Создадим скрипт работающий по cron'y и отправляющий файл на почту.

#!/bin/bash
XLSX_FILE="/tmp/Ot4et.xlsx"
 
rm -f "${XLSX_FILE}"
 
STDOUT=$(/usr/local/psql2xlsx/psql2xlsx.py -f "${XLSX_FILE}" 2>&1)
 
if [ ! -f "${XLSX_FILE}" ]; then
    echo "ERROR" > "${XLSX_FILE}"
fi
 
sendemail -f test@domain.com -u "AutoOt4et" \
          -m "${STDOUT}" -o message-charset=utf-8 -a "${XLSX_FILE}" \
          -s smtp.mail.com:587 -xu 'LoGiN' -xp 'PaSsWorD' \
          -t alexey@domain.ru \

В этом примере я использую утилиту sendemail. К сожалению в текущей версии у нее нет правильного mime-type для вложений .xlsx
Это может доставить небольшие неприятности при открытии документа из почтового клиента, но легко поправимо:

/bin/sendemail

    elsif ($encoding =~ /mdb|mda|mde/i) {                          $content_type = 'application/vnd.ms-access';       }
+   elsif ($encoding =~ /xlsx/i)                            {      $content_type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';}
    elsif ($encoding =~ /xls|xlt|xlm|xld|xla|xlc|xlw|xll/i) {      $content_type = 'application/vnd.ms-excel';        }






Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
114​ +1 = 
 
handmade/postgres/psql2xlsx.txt · Последние изменения: 2018/10/10 12:18 — lexa
Gentoo Linux Gentoo Linux Driven by DokuWiki