INSERT / UPDATE в MySQL на Python

Ну в принципе и не на Python, важен принцип. Что мне нужно? Если UPDATE завершился ошибкой (данные не обновлены т.к. их нет), тогда INSERT. Вообще в MYSQL есть специальная команда — REPLACE, у которой синтаксис такой-же как у INSERT, за исключением того, что если такая запись уже есть, то она просто измениться. Одно НО. Таблица обязательно должна содержать колонки с UNIQUE. А если их нет, и добавить нельзя? Тогда к сожалению придется «отлавливать» результат выполнения UPDATE — а именно количество изменившихся записей. Если 0 — считаем что такой записи вообще нет, и вставляем. На Python нечто подобное реализовать можно вот так:

1С Дополнительные реквизиты на форме при помощи расширения

В своей работе с 1С стараюсь сделать так, чтобы обновления проходили максимально безболезненно. Для этого нужно сохранять не изменяемость конфигурации. В настоящий момент, при помощи «расширений» конфигурации, многие вещи достаточно легко сделать основную конфигурацию не трогая вообще. Ниже рассмотрю, как я сделал задачу по добавлению значения «Покупка с сайта» в документе «Реализация товаров».

1) Выносим в расширение документ документ «Реализация товаров и добавляем реквизит «ПокупкаССайта» в реквизиты формы. Да! именно в реквизиты формы, а не документа. В настоящий момент платформа 1С не дает добавлять в расширения реквизиты документа (но обещают). Перетаскиваем реквизит в элементы и обязательно ставим галочку на «АктивизироватьПоУмолчанию» — иначе на форме при запуске не отобразится:

2) Следующая задача — сделать сохранение значения данного реквизита с привязкой к документы. Самое удобное — хранить значение в специально предназначенном для этого регистре ДополнительныеРеквизитыИСведения. В нём два измерения: обьект и Свойство. Обьект в нашем случае — это документ Реализации, а свойство нужно задать в ПланеВидовХарактеристик.ДополнительныеРеквизитыИСведения. Например так:

  

И далее создадим обработчики открытия формы и закрытия в которых реализуем чтение из регистра и запись в этот регистр:

Как удалить последний символ строки на python

Оказывается совсем просто:

Например:

Пачкой обновляем сертификаты SSL на сервере

Как известно сертификаты LetsEncrypt живут только 3 месяца, и соответственно их нужно регулярно обновлять. Самый хороший и простой способ обновления сертификатов — по записи DNS, однако это подходит не всем. Обновление же сертификата записью файла в «корне» сайта тоже не всегда работает по разным причинам. Выходом может стать следующий «финт ушами»: создаем альтернативный файл виртуальных хостов (рассматриваю вариант с apache, nginx практически не использую), который используется исключительно под получение сертификатов. Т.е. логика следующая: скрипт «подменяет» файл с виртуальными хостами на временный «облегченный», apache перестартовываем, спокойно обновляем сертификаты, затем возвращаем оригинальный файл с виртуальными хостами и снова перестартовываем apache. Особенностью «временного» файла является то что задана единая точка хранения файлов которые требуется создать для обновления сертификатов.

Итак получается скрипт обновления, что-то вроде:

«Временный» файл хостов:

bash скрипт обновления:

 

Да, при таком способе получается некий простой в работе сайтов. Но раз в 3 месяца, ночью это для меня приемлимый вариант.

Как сделать простейшее API для своего проекта?

Бывает, что какой-то проект «вырастает из штанишек» и становится необходимым разработать сервис который будет отдавать часть своих данных, по запросу на сторонние сервера. Вот и меня возникла такая необходимость .Вот каркас, с чего начать.

В моем случае сервер защищен от «чужих» протоколом SSL и сертификатом .p12 с паролем. Соответственно для получения данных по API на сторонних ресурсах необходимы будут pem и key файлы от выданного пользователю сертификата.

Для некоторых может быть удобным получение «сессионного ключа» для авторизации и допуска к API.  В принципе доработать не сложно кому нужно. Приведенные ниже примеры — не рабочие, не хватает части файлов, размещено просто для того чтобы можно было понять принцип разработки.

На сервере в корне создадим файл api.php:

Как мы видим — суть его, поймать на входе команду, и выполнить файл из папки /api/, совпадающий с именем команды. Так мы избавляемся от головной боли с раширением количества команд API.

В папке /api/  создадим первую команду нашего API — файл version:

Теперь пример использования данного API (для удобства обернуто в класс):

Результат выполнения:

1 105 106 107 108 109 293