Страницы

29 июня 2015 г.

Oracle. Иерархические (рекурсивные запросы)

hierarchical_query_clause::=

Синтаксис написания иерархических запросов отличается от синтаксиса через CTE, как например в SQL Server. Для меня это стало неожиданностью.
Документация на основе которой я пишу этот пост доступна по ссылке.

Здесь я составлю краткий конспект, для тех кто понимает принципы рекурсии или просто хочет вспомнить как это делается.
Вся синтаксическая цепочка иерархических запросов изображена на рисунке в начале статьи.
Итак, по порядку.

START WITH.
Задает условия определения корня дерева.

CONNECT BY.
Определяет условие связи родительских записей и дочерних.

NOCYCLE.
Задает режим при котором будут игнорироваться "петли" в дереве. Т.е. ситуации когда родительская запись ссылается на дочернюю, а дочерняя снова на родительскую. С этой опцией у вас не будет переполнения рекурсии. Отследить зацикленные узлы можно с помощью поля CONNECT_BY_IS_CYCLE. Это поле вернет 1 если узел зациклен.

PRIOR
В условии CONNECT BY должен быть определен оператор PRIOR. Этот оператор задает направление развертывания иерархии. PRIOR указывается со стороны поля которое должно быть дочерним при развертывании. Т.е. таким образом мы указываем уловие "родитель" = "предыдущему потомку". Другими словами рекурсия на каждом новом проходе ищет потомков предыдущей записи, собирая иерархию.

CONNECT_BY_ROOT.
Псевдополе которое выводит значение из корневой записи на протяжении всей выборки. 

CONNECT_IS_LEAF.
Псевдополе для индикации листов дерева. Т.е. если у узла в иерархии нет потомков, псевдополе выведет 1, иначе 0. 

Примеры можно увидеть здесь.
Более подробно о принципе работы на русском - здесь.

20 июня 2015 г.

Django 1.8. Устанавливаем и настраиваем MySql. Краткое руководство.

Первое что необходимо сделать, это установить MySql.
Как устанавливать и где взять дистрибутив можно  узнать тут:
Install MySql

В конце приведены правки файла py.ini. Не нужно ставить кодировку 1251 как там рекомендуют. Если верить источникам для Django это не пригодится. Вместо кодировки 1251 ставим utf8.

Вот пример:

[mysql]
default-character-set=utf8

[mysqld]
port=3306
character-set-server=utf8
default-storage-engine=MYISAM

Вот подробности, если нужно: Пример

Далее.
Нам нужно установить клиента для обращения к серверу. Есть варианты. Вот ссылка на подробности: http://djbook.ru/rel1.8/ref/databases.html#mysql-db-api-drivers
Если кратко, то

  • MySQLdb - для тех у кого python v2.
  • mysqlclient - рекомендуемый вариант, поддерживает python v3.
  • MySQL Connector/Python is a pure Python driver from Oracle that does not require the MySQL client library or any Python modules outside the standard library.... Ну тут думаю понятно.
Я ставил mysqlclient.

Установка mysqlclient.

т.е. переходим в директорию куда скачали whl-файл и вызываем pip install <file_name>. На экране видно что должно быть в окне cmd в случае успешной установки.