SQLite — самая простая база данных, которая работает везде
Мы уже рассказывали подробно о том, что такое базы данных, как они устроены, какие бывают и как работают. Вот короткая версия:
- База данных — это способ хранения разных данных в одном месте.
- Внутри базы могут храниться разные данные: фото, текст, музыка, числа, код, ссылки, цены и что угодно ещё.
- Когда говорят про базы данных, чаще всего имеют в виду табличные базы данных — те, где информация хранится в разных таблицах;
- Пример табличной базы — MySQL. Она многое умеет, к ней написано много документации и правил, поэтому начинают обычно с неё.
- Чтобы управлять данными в базе, например добавлять новые записи, удалять старые или что-то искать, используют специальный язык запросов к базе — SQL.
- Эти запросы обрабатывает СУБД — система управления базами данных. Это как движок для сайтов — он выполняет запросы, работает с базой и отдаёт нам результаты.
Получается, нам на компьютере нужна отдельная система, чтобы управлять данными в базе, и обычно это тоже MySQL.
Но есть способ проще: использовать SQLite.
Что такое SQLite
SQLite — это встраиваемая СУБД, когда система управления встраивается в саму программу. Это значит, что все запросы и команды идут в базу не через посредника, а напрямую из приложения. Чтобы встроить SQLite в код, достаточно подключить нужную библиотеку.
Начинающим программистам: что такое фреймворки и библиотеки
А ещё SQLite — это проект с открытым исходным кодом. Это значит, что его может использовать кто угодно без опасения, что проект закроют и все базы сразу перестанут работать.
Что такое свободные, открытые и бесплатные программы
Почему это просто и чем отличается от MySQL
Все данные в SQLite хранятся в одном файле — таблицы, служебные поля, связи и всё остальное. Это упрощает работу с базой и позволяет легко переносить данные из одного места в другое.
MySQL. Допустим, мы запустили и настроили обычную базу данных на одном компьютере, а потом захотели перенести её на другой. Чтобы это сделать, нужно:
- найти все файлы, которые относятся к базе;
- положить их в новое место;
- прописать настройки;
- объяснить СУБД, как подключиться к базе;
- проверить, что подтянулись все поля, записи и связи.
Это несложно, но требует кропотливой ручной работы.
SQLite. У SQLite всё иначе — чтобы перенести базу в новое место достаточно:
Благодаря такой простоте настройки, подключения и развёртывания базы SQLite и завоевал такую популярность.
Возможности SQLite
Все SQL-подобные СУБД умеют плюс-минус одно и то же и отличаются в основном деталями: триггерами, работой с кэшем, процедурами и правилами обработки. Чем крупнее СУБД, тем больше она отличается от других, даже если там используется тот же самый язык запросов SQL.
Что такое кэш и зачем его чистить
Разработчики SQLite поступили иначе: они взяли все основные возможности СУБД и отказались от узкоспециализированных запросов. Идея была в том, чтобы сделать универсальную базу для всех — простую, понятную и надёжную. Поэтому SQLite умеет всё, что умеют другие базы:
- работать с запросами;
- создавать связи;
- хранить данные различных типов;
- работать с шаблонами;
- понимать выражения и функции;
- работать с присоединёнными базами.
Чтобы SQLite работала быстро на любом устройстве, в неё специально добавили некоторые ограничения: уменьшили длину строки, количество колонок, таблиц и максимальную длину SQL-запроса. Но даже с такими ограничениями база может занимать около 280 терабайт.
Стабильность и надёжность
Особенность разработки SQLite также в том, что тестами покрыто 100% исходного кода. Это значит, что в нём протестированы каждая функция, обработчик и класс, причём на всех уровнях — от юнита до всей системы.
Словарь тестировщика: автотесты, юнит-тесты и другие важные слова
Тестов в разработке SQLite настолько много, что объём кода для тестов давно превысил объём самого SQLite.
- при нехватке памяти;
- при неправильно сформированных запросах;
- при внезапном отключении питания;
- при одновременном доступе к базе миллиона пользователей;
- на слабом железе;
- при повреждениях оперативной памяти во время выполнения запроса.
По этой причине SQLite часто используется там, где нужна максимальная надёжность и работа в неопределённых условиях.
Где используется
SQLite поддерживается большинством языков программирования без дополнительных настроек:
- Python,
- Swift,
- C++,
- Java,
- C#,
- Perl,
- PHP.
Если говорить про мобильные приложения, сервисы и программы, то список тех, кто использует SQLite, будет очень большой, например:
- большинство программ для iOS и Android,
- Google Chrome,
- Adobe Photoshop Lightroom,
- Safari,
- Nextcloud,
- 1С:Предприятие,
- Скайп.
Что дальше
В следующей статье напишем простой код на Python, в котором поработаем с базой: создадим её и наполним разными данными. Подпишитесь, чтобы не пропустить продолжение.
Текст:
Михаил Полянин
Редактор:
Максим Ильяхов
Художник:
Алексей Сухов
Корректор:
Ирина Михеева
Вёрстка:
Кирилл Климентьев
Соцсети:
Виталий Вебер
Как работает модуль sqlite3 в Python 3
26 апреля, 2021 11:42 дп 5 372 views | Комментариев нетSQLite – это файловая база данных SQL, которая поставляется в комплекте с Python и может использоваться в приложениях Python, устраняя необходимость устанавливать дополнительное программное обеспечение.
В этом руководстве мы поговорим о модуле sqlite3 в Python 3. Чтобы потренироваться, мы создадим соединение с базой данных SQLite, добавим в эту БД таблицу, вставим данные, а также извлечем и отредактируем их.
Предположим, у нас есть аквариум и мы хотим создать БД, чтобы хранить в ней данные о рыбах, которые в нем живут.
Требования
Чтобы получить максимальную пользу от этого руководства, вы должны иметь некоторое представление о работе с Python и некоторый базовый опыт работы с SQL.
Для получения необходимой справочной информации вы можете просмотреть эти ресурсы:
- Раздел о Python3
- Запросы в MySQL
1: Создание подключения к базе данных SQLite
Базы данных SQLite – это полнофункциональные механизмы SQL, которые можно использовать для многих целей. Подключаясь к БД SQLite, мы получаем доступ к данным, которые находятся в файле на нашем компьютере. В данном разделе для примера мы рассмотрим базу данных, которая помогает нам отслеживать количество рыб в воображаемом аквариуме.
Подключиться к базе данных SQLite можно с помощью модуля sqlite3:
import sqlite3
connection = sqlite3. connect("aquarium.db")
Строка import sqlite3 дает программе Python доступ к модулю sqlite3. Функция sqlite3.connect () возвращает объект Connection, который мы будем использовать для взаимодействия с базой данных SQLite, хранящейся в файле aquarium.db. Файл aquarium.db создается функцией sqlite3.connect() автоматически (если такой файл еще не существует на компьютере).
Чтобы убедиться, что объект connection создан успешно, запустите:
print(connection.total_changes)
Если мы запустим этот код Python, мы увидим такой результат:
0
connection.total_changes в команде выше – это общее количество строк базы данных, которые были изменены объектом connection. Поскольку мы еще не выполнили ни одной команды SQL, мы ожидаем получить 0.
Если в какой-то момент вы захотите начать это руководство сначала, вы можете удалить файл aquarium.db с компьютера.
Примечание: Также можно подключиться к базе данных SQLite, которая находится строго в памяти (а не в файле), передав функции sqlite3.
sqlite3.connect(“:memory:”)
Помните: такая база данных SQLite исчезнет, как только Python завершит работу. Это может быть удобно, если вам нужна временная песочница, в которой вы могли бы опробовать какие-то функции, и вы не хотите сохранять данные после выхода из программы.
2: Добавление данных в БД SQLite
После того как мы подключились к базе данных aquarium.db, мы можем попробовать вставить в нее данные и извлечь их.
В базах SQL данные хранятся в таблицах. Таблицы определяют набор столбцов и содержат 0 или более строк с данными для каждого столбца.
Давайте создадим таблицу fish, в которой будут такие данные:
name | species | tank_number |
Willy | shark | 1 |
Jamie | cuttlefish | 7 |
Итак, таблица fish будет содержать имя (столбец name), вид (species) и номер резервуара (tank_number) для каждой рыбы в аквариуме. Согласно записям, пока что в аквариуме есть два жителя: акула Вилли и каракатица по имени Джейми.
Создать эту таблицу рыб в SQLite можно при помощи соединения, которое мы установили в разделе 1:
cursor.execute("CREATE TABLE fish (name TEXT, species TEXT, tank_number INTEGER)")
connection.cursor() возвращает объект Cursor. Такие объекты позволяют отправлять SQL-операторы в базу данных SQLite с помощью cursor.execute(). Строка “CREATE TABLE fish …” – это SQL-оператор, который создает таблицу fish с тремя описанными столбцами: name (с типом данных TEXT), species (также с типом TEXT) и tank_number (с типом INTEGER).
Теперь, когда мы создали таблицу, мы можем вставить в нее строки данных:
cursor.execute("INSERT INTO fish VALUES ('Willy', 'shark', 1)")
cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")
Мы вызываем cursor.execute() дважды: один раз, чтобы вставить строку об акуле Вилли из резервуара 1, и еще раз, чтобы вставить строку о каракатице Джейми из резервуара 7. “INSERT INTO fish VALUES …” – это SQL-оператор, который позволяет добавлять строки в таблицу.
В следующем разделе мы познакомимся с SQL-оператором SELECT:он поможет нам проверить строки, которые мы только что вставили в нашу таблицу.
3: Извлечение данных из БД SQLite
В разделе 2 мы добавили в таблицу по имени fish две строки. Извлечь эти строки можно с помощью оператора SELECT:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()
print(rows)
Если запустить этот код, мы получим такой результат:
[('Willy', 'shark', 1), ('Jamie', 'cuttlefish', 7)]
Функция cursor.execute() запускает оператор SELECT для получения значений столбцов name, species и tank_number в таблице fish. Функция fetchall() извлекает все результаты оператора SELECT. Когда мы с помощью print(rows) выводим строки на экран, мы видим список из двух кортежей. Каждый кортеж состоит из трех записей – по одной записи для каждого столбца из таблицы. Оба кортежа содержат данные, которые мы вставили в таблицу в предыдущем разделе.
Допустим, нам нужно извлечь из таблицы только строки, которые соответствуют определенному набору критериев. Тогда мы можем использовать оператор WHERE:
target_fish_name = "Jamie"
rows = cursor.execute(
"SELECT name, species, tank_number FROM fish WHERE name = ?",
(target_fish_name,),
).fetchall()
print(rows)
Это даст следующий результат:
[('Jamie', 'cuttlefish', 7)]
Как и в предыдущем примере, cursor.execute(<SQL statement>).fetchall() позволяет извлечь все результаты оператора SELECT. Оператор WHERE в SELECT фильтрует данные и выбирает строки, в которых значение name равно искомому target_fish_name. Обратите внимание: мы используем символ «?», чтобы заменить значение переменной target_fish_name в операторе SELECT. Мы ожидаем, что заданному фильтру будет соответствовать только одна строка, и в результате действительно видим только строку Jamie, cuttlefish, 7.
Важно! Никогда не используйте строковые операции Python, чтобы динамически создать строку оператора SQL. Использование строковых операций Python для сборки операторов SQL открывает все двери атакам на основе SQL-инъекций. Подобные атаки могут использоваться для кражи или изменения данных, хранящихся в вашей БД. Для динамической замены всегда используйте заполнитель «?» в SQL-операторах. Передайте функции Cursor.execute() кортеж значений в качестве второго аргумента, чтобы привязать ваши значения к оператору. Такой подход используется в этом руководстве.
4: Изменение данных в БД SQLite
Строки в базе данных SQLite можно изменять с помощью SQL-операторов UPDATE и DELETE.
Предположим, что акула Вилли переехала в резервуар №2. Следовательно, нам нужно изменить строку в таблице, чтобы отразить это изменение:
new_tank_number = 2
moved_fish_name = "Willy"
cursor.execute(
"UPDATE fish SET tank_number = ? WHERE name = ?",
(new_tank_number, moved_fish_name)
)
SQL-оператор UPDATE изменит значение tank_number для записи Willy на 2. Оператор WHERE внутри UPDATE отфильтрует все остальные записи: значение tank_number изменится только в том случае, если name = “Willy”.
Давайте запустим следующий оператор SELECT, чтобы подтвердить, что данные обновлены правильно:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()
print(rows)
Мы увидим следующий результат:
[('Willy', 'shark', 2), ('Jamie', 'cuttlefish', 7)]
Обратите внимание, в строке для Willy столбец tank_number теперь имеет значение 2.
Допустим, акула Вилли была выпущена в дикую природу и больше не живет в нашем аквариуме. Значит, имеет смысл удалить эту строку из таблицы.
Выполните SQL-оператор DELETE, чтобы удалить строку:
released_fish_name = "Willy"
cursor.execute(
"DELETE FROM fish WHERE name = ?",
(released_fish_name,)
)
SQL-оператор DELETE удалит строку, а оператор WHERE поможет ему найти необходимую: строка будет удалена только в том случае, если name = “Willy”.
Следующий оператор SELECT подтвердит, что удаление выполнено правильно:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()
print(rows)
Мы получим следующий результат:
[('Jamie', 'cuttlefish', 7)]
Обратите внимание, строки про акулу Вилли больше нет в таблице, остается только каракатица Джейми.
5: Оператор with
В течение работы с этим руководством мы использовали два основных объекта для взаимодействия с базой данных aquarium.db: объект Connection по имени connection и объект Cursor по имени cursor.
Когда файлы Python больше не используются, их нужно закрывать – точно так же следует закрыть и объекты Connection и Cursor, когда они больше не нужны.
Автоматически закрывать объекты Connection и Cursor можно при помощи оператора with.
from contextlib import closing
with closing(sqlite3.connect("aquarium.db")) as connection:
with closing(connection. cursor()) as cursor:
rows = cursor.execute("SELECT 1").fetchall()
print(rows)
closing – это удобная функция, предоставляемая модулем contextlib. Когда оператор with завершает работу, closing вызывает функцию close()для любого переданного ему объекта. В этом примере closing используется дважды: один раз для объекта Connection, второй раз – для объекта Cursor.
Этот код даст нам следующий результат:
[(1,)]
Поскольку оператор SELECT 1 всегда возвращает одну строку с одним столбцом со значением 1, в результате мы получаем кортеж с единственным значением 1.
Заключение
Модуль sqlite3 – мощная часть стандартной библиотеки Python; он позволяет работать с полнофункциональной базой данных SQL, не устанавливая никакого дополнительного программного обеспечения.
В этом руководстве вы узнали, как использовать sqlite3 для подключения к базе данных SQLite, добавлять данные в эту БД, а также читать и изменять эти данные. Попутно мы также кратко поговорили об опасности SQL-инъекций и о том, как использовать contextlib. closing, чтобы автоматически закрыть объекты Python.
Читайте также: Краткий обзор реляционных систем управления базами данных
Tags: Python, Python 3, SQL, SQLiteО SQLite
О SQLite Маленький. Быстрый. Надежный.
Выберите любые три.
- Дом
- Меню
- О компании
- Документация
- Скачать
- Лицензия
- Поддержка
- Покупка
SQLite — внутрипроцессная библиотека, реализующая автономный, бессерверный, нулевая конфигурация, транзакционный Механизм базы данных SQL. Код для SQLite находится в общественное достояние и, таким образом, является бесплатным для использовать в любых целях, коммерческих или личных. SQLite — самая распространенная база данных в мире. с большим количеством приложений, чем мы можем количество, в том числе несколько громких проектов.
SQLite — это встроенный механизм базы данных SQL. В отличие от большинства других баз данных SQL, SQLite не имеет отдельного серверный процесс. SQLite читает и записывает прямо на обычный диск файлы. Полная база данных SQL с несколькими таблицами, индексами, триггеры и представления содержатся в одном файле на диске. Формат файла базы данных является кроссплатформенным — вы можете свободно копировать базу данных. между 32-битной и 64-битной системами или между с обратным порядком байтов и прямой порядок байтов архитектуры. Эти функции делают SQLite популярным выбором, поскольку Формат файла приложения. Файлы базы данных SQLite представляют собой рекомендуемый формат хранения Библиотекой Конгресса США. Думайте о SQLite не как о замене Оракул, но как замена fopen()
SQLite — это компактная библиотека. При включении всех функций размер библиотеки может быть менее 750 КБ, в зависимости от целевой платформы и настроек оптимизации компилятора. (64-битный код больше. И некоторые оптимизации компилятора такие как агрессивное встраивание функций и развертывание циклов, могут привести к объектный код должен быть намного больше. ) Существует компромисс между использованием памяти и скоростью. SQLite обычно работает быстрее, чем больше памяти вы даете это. Тем не менее, производительность обычно неплохая даже в средах с малым объемом памяти. В зависимости от того, как он используется, SQLite может быть быстрее, чем прямой ввод-вывод файловой системы.
SQLite есть очень тщательно проверяется перед каждым выпуска и имеет репутацию очень надежного. Большая часть исходного кода SQLite посвящена исключительно тестированию и проверка. Набор автоматизированных тестов выполняет миллионы и миллионы тестовые примеры, включающие сотни миллионов отдельных операторов SQL и достигает 100%-го охвата отраслевых тестов. SQLite изящно реагирует на память сбои распределения и ошибки дискового ввода-вывода. Транзакции КИСЛОТА даже в случае прерывания из-за системных сбоев или сбоев питания. Все это проверяется автоматизированные тесты с использованием специальных тестовых наборов, которые имитируют системные сбои. Конечно, даже при всем этом тестировании все еще есть ошибки. Но в отличие от некоторых подобных проектов (особенно коммерческих конкурентов) SQLite открыто и честно говорит обо всех ошибках и предоставляет списки ошибок и минута за минутой хронологии изменений кода.
База кода SQLite поддерживается международная команда разработчиков, которые работают над Полный рабочий день SQLite. Разработчики продолжают расширять возможности SQLite и повысить его надежность и производительность, сохраняя при этом обратная совместимость с опубликованная спецификация интерфейса, Синтаксис SQL и формат файла базы данных. Исходный код абсолютно бесплатен для всех желающих. но профессиональная поддержка также доступна.
Проект SQLite запущен 09.05.2000. Будущее всегда сложно предсказать, но замысел разработчиков заключается в поддержке SQLite до 2050 года. Решения по проектированию принимаются имея в виду эту цель.
Мы, разработчики, надеемся, что вы найдете SQLite полезным, и мы умоляю вас использовать его хорошо: делать хорошие и красивые продукты, которые являются быстрыми, надежными и простыми в использовании. Ищите прощения для себя как вы прощаете других. И так же, как вы получили SQLite бесплатно, так и безвозмездно отдайте, заплатив долг вперед.
известных пользователей SQLite
известных пользователей SQLite Маленький. Быстрый. Надежный.
Выберите любые три.
- Дом
- Меню
- О программе
- Документация
- Скачать
- Лицензия
- Поддержка
- Покупка
SQLite используется буквально миллионами приложений с буквально миллиардами и миллиардами развертываний. SQLite является наиболее широко используемым движком базы данных в мире. мир сегодня.
Некоторые из наиболее известных пользователей SQLite показаны ниже. в алфавитном порядке. Это не полный список. SQLite находится в общественное достояние и так далее разработчики используют его в своих проектах, даже не сообщая нам об этом.
Adobe использует SQLite в качестве приложение формат файла для их Фотошоп Лайтрум продукт. SQLite также является стандартной частью Интегрированная среда выполнения Adobe (AIR). Сообщается, что Acrobat Reader также использует SQLite.
Airbus подтверждает, что SQLite используется в летном ПО для Семейство A350 XWB самолетов.
Apple использует SQLite во многих (большинстве?) родные приложения, работающие на настольных компьютерах и серверах Mac OS-X и на устройствах iOS, таких как iPhone и iPod. SQLite также используется в iTunes даже на оборудовании, отличном от Apple.
Bentley Systems использует SQLite в качестве формат файла приложения для их Микростанция Продукт CAD/CAM.
Bosch использует SQLite в мультимедиа системы устанавливаются на автомобили GM, Nissan и Suzuki. (связь)
Набирающий популярность файл Dropbox Сообщается, что служба архивирования и синхронизации использует SQLite в качестве первичное хранилище данных на стороне клиента.
Expensify использует SQLite на стороне сервера ядро базы данных для своего программного обеспечения для отчетности о расходах в масштабе предприятия.
Facebook использует SQLite в качестве базы данных SQL двигатель в их скверный продукт.
Мы считаем, что General Electric использует SQLite в каком-либо продукте или другой, потому что они написали разработчикам SQLite в не менее четырех отдельных запросов номер экспортного контроля США для SQLite. Так что предположительно GE использует SQLite в том, что они экспортируют. Но никто (за пределами GE), кажется, знает, что это может быть.
использует SQLite в своих Android мобильный телефон операционной системы, а в Веб-браузер Chrome.
Intuit, по-видимому, использует SQLite в QuickBooks и в TurboTax судить по какой-то ошибке отчеты от просмотренных пользователей здесь и здесь.
Библиотека Конгресса США признает SQLite как рекомендуемый формат хранения для сохранения цифрового контента.
McAfee использует SQLite в своем антивирусе программы. Упоминается здесь и подразумевается здесь.
Microsoft использует SQLite в качестве основного компонента Windows 10 и других продуктов.
SQLite — это основной формат хранения метаданных для веб-браузер Firefox и Читатель электронной почты Thunderbird от Мозилла.
Стандарт навигационных данных использует SQLite в качестве формата файла приложения.
Популярный PHP язык программирования поставляется со встроенными SQLite2 и SQLite3.
Весь питон дистрибутивы, начиная с Python 2.5, включают SQLite.
Диспетчер пакетов RedHat (RPM) использует SQLite для отслеживания своего состояния.
Есть несколько наблюдения SQLite в клиенте Skype для Mac OS X и Windows.
Язык программирования Tcl/Tk теперь поставляется со встроенным SQLite. SQLite работает особенно хорошо с Tcl, поскольку SQLite изначально был расширением Tcl, которое впоследствии «сбежали» в дикую природу.
SQLite поставляется в комплекте с Xojo среда программирования (ранее REALbasic)
Adobe использует SQLite в качестве приложение формат файла для их Фотошоп Лайтрум продукт. SQLite также является стандартной частью Интегрированная среда выполнения Adobe (AIR). Сообщается, что Acrobat Reader также использует SQLite. | |
Airbus подтверждает, что SQLite используется в летном ПО для Семейство A350 XWB самолетов. | |
Apple использует SQLite во многих (большинстве?) родные приложения, работающие на настольных компьютерах и серверах Mac OS-X и на устройствах iOS, таких как iPhone и iPod. SQLite также используется в iTunes даже на оборудовании, отличном от Apple. | |
Bentley Systems использует SQLite в качестве формат файла приложения для их Микростанция Продукт CAD/CAM. | |
Bosch использует SQLite в мультимедиа системы устанавливаются на автомобили GM, Nissan и Suzuki. (связь) | |
Набирающий популярность файл Dropbox Сообщается, что служба архивирования и синхронизации использует SQLite в качестве первичное хранилище данных на стороне клиента. | |
Expensify использует SQLite на стороне сервера ядро базы данных для своего программного обеспечения для отчетности о расходах в масштабе предприятия. | |
Facebook использует SQLite в качестве базы данных SQL двигатель в их скверный продукт. | |
Мы считаем, что General Electric использует SQLite в каком-либо продукте или другой, потому что они написали разработчикам SQLite в не менее четырех отдельных запросов номер экспортного контроля США для SQLite. Так что предположительно GE использует SQLite в том, что они экспортируют. Но никто (за пределами GE), кажется, знает, что это может быть. | |
использует SQLite в своих Android мобильный телефон операционной системы, а в Веб-браузер Chrome. | |
Intuit, по-видимому, использует SQLite в QuickBooks и в TurboTax судить по какой-то ошибке отчеты от просмотренных пользователей здесь и здесь. | |
Библиотека Конгресса США признает SQLite как рекомендуемый формат хранения для сохранения цифрового контента. | |
McAfee использует SQLite в своем антивирусе программы. Упоминается здесь и подразумевается здесь. | |
Microsoft использует SQLite в качестве основного компонента Windows 10 и других продуктов. | |
SQLite — это основной формат хранения метаданных для веб-браузер Firefox и Читатель электронной почты Thunderbird от Мозилла. | |
Стандарт навигационных данных использует SQLite в качестве формата файла приложения. | |
Популярный PHP язык программирования поставляется со встроенными SQLite2 и SQLite3. | |
Весь питон дистрибутивы, начиная с Python 2.5, включают SQLite. | |
Диспетчер пакетов RedHat (RPM) использует SQLite для отслеживания своего состояния. | |
Есть
несколько
наблюдения
SQLite в клиенте Skype для Mac OS X и Windows. |