Шаг 180.
Основы языка Python.
Основы SQLite. Создание таблицы (продолжение)

    На этом шаге мы рассмотрим особенности преобразования значений полей.

    В целях совместимости с другими базами данных значение, указанное в параметре <Тип данных>, преобразуется в один из пяти классов родства:


   Примечание. Все классы указаны в порядке уменьшения приоритета определения родства. Например, если значение соответствует сразу двум классам: INTEGER и TEXT, то будет назначен класс INTEGER, т. к. его приоритет выше.

    Классы родства являются лишь обозначением предполагаемого типа данных, а не строго определенным значением. Иными словами, SQLite использует не статическую (как в большинстве баз данных), а динамическую типизацию. Например, если для поля указан класс INTEGER, то при вставке значения производится попытка преобразовать введенные данные в целое число. Если преобразовать не получилось, то производится попытка преобразовать введенные данные в вещественное число. Если данные нельзя преобразовать в целое или вещественное число, то будет произведена попытка преобразовать их в строку и т. д, Пример:


Рис.1. Использование классов родства

    В этом примере мы воспользовались встроенной функцией typeof () для определения типа данных, хранящихся в ячейке таблицы. SQLite поддерживает следующие типы данных:

    Если после INTEGER указаны ключевые слова PRIMARY KEY (т. е. поле является первичным ключом), то в это поле можно вставить только целые числа или значение NULL. При указании значения NULL будет вставлено число, на единицу большее максимального числа в столбце. Пример:


Рис.2. Примеры вставки значений

    Класс NUMERIC аналогичен классу INTEGER. Различие между этими классами проявляется только при явном преобразовании типов с помощью инструкции CAST. Если строку, содержащую вещественное число, преобразовать в класс INTEGER, то дробная часть будет отброшена. Если строку, содержащую вещественное число, преобразовать в класс NUMERIC, то возможны два варианта:

    Пример:


Рис.3. Особенности преобразования значений

    На следующем шаге мы продолжим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг