Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия | |||
— | python_i_sqlite [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Python и SQLite ====== | ||
+ | {{htmlmetatags> | ||
+ | metatag-description=(Создание базы данных SQLite для Python и работа с ней.) | ||
+ | }} | ||
+ | |||
+ | Python имеет встроенную поддержку SQLite базы данных, | ||
+ | |||
+ | |||
+ | * **Установка SQLite для Python Linux Ubuntu** | ||
+ | < | ||
+ | # aptitude install sqlite3-doc sqlite3 python-pysqlite2 | ||
+ | </ | ||
+ | Проверяем: | ||
+ | < | ||
+ | # sqlite3 -version | ||
+ | 3.6.10 | ||
+ | </ | ||
+ | * **Как узнать версию движка sqlite в котором эта база была создана? | ||
+ | Имеется база данных (файл) sqlite (например файл БД называется sqlitest). Как узнать версию движка sqlite в котором эта база была создана? | ||
+ | |||
+ | < | ||
+ | # cat sqlitest | less | ||
+ | SQLite format 3^@^D^@^A^A^@@ | ||
+ | ... | ||
+ | </ | ||
+ | В первых 16 байтах написана версия БД. В этом случае версии 3. | ||
+ | |||
+ | P.S. Младшие номера версий и уж тем более номера билдов на структуру файла базы не влияют. | ||
+ | |||
+ | [[http:// | ||
+ | * **Значение констант БД SQlite** | ||
+ | < | ||
+ | ~$ ipython | ||
+ | / | ||
+ | from sets import Set | ||
+ | Python 2.6.2 (release26-maint, | ||
+ | Type " | ||
+ | |||
+ | IPython 0.9.1 -- An enhanced Interactive Python. | ||
+ | ? -> Introduction and overview of IPython' | ||
+ | %quickref -> Quick reference. | ||
+ | help -> Python' | ||
+ | object? | ||
+ | In [7]: import sqlite3 | ||
+ | </ | ||
+ | **apilevel** = 2.0 - sqlite поддерживает DB-API 2.0 | ||
+ | < | ||
+ | In [10]: sqlite3.apilevel | ||
+ | Out[10]: ' | ||
+ | </ | ||
+ | **paramstyle** - тип используемых пометок при подстановке параметров. Возможны следующие значения этой константы: | ||
+ | * **format** форматирование в стиле языка ANSI C (например, | ||
+ | * **pyformat** использование именованных спецификаторов формата в стиле Python (' | ||
+ | * **qmark** использование знаков '?' | ||
+ | * **numeric** использование номеров позиций (': | ||
+ | * **named** использование имен подставляемых параметров (': | ||
+ | < | ||
+ | In [11]: sqlite3.paramstyle | ||
+ | Out[11]: ' | ||
+ | </ | ||
+ | **threadsafety** - целочисленная константа, | ||
+ | < | ||
+ | 0 Модуль не поддерживает потоки. | ||
+ | 1 Потоки могут совместно использовать модуль, | ||
+ | 2 Потоки могут совместно использовать модуль и соединения. | ||
+ | 3 Потоки могут совместно использовать модуль, | ||
+ | | ||
+ | </ | ||
+ | < | ||
+ | In [12]: sqlite3.threadsafety | ||
+ | Out[12]: 1 | ||
+ | </ | ||
+ | |||
+ | ====== Работа с базой данных SQLite ====== | ||
+ | В общем случае последовательность работы с БД выглядит так: | ||
+ | |||
+ | | №^ Метод | ||
+ | ^1 |Подключение к базе данных (вызов **connect()** с получением объекта-соединения) | ||
+ | ^2 |Создание одного или нескольких курсоров (вызов метода объекта-соединения **cursor()** с получением объекта-курсора) | | | ||
+ | ^3 |Исполнение команды или запроса (вызов метода **execute()** или его вариантов) | ||
+ | ^4 |Получение результатов запроса (вызов метода **fetchone()** или его вариантов) | ||
+ | ^5 |Завершение транзакции или ее откат (вызов метода объекта-соединения **commit()** или **rollback()**) | ||
+ | ^6 |Когда все необходимые транзакции произведены, | ||
+ | |||
+ | ===== DB-API ===== | ||
+ | Аббревиатура **DB-API** объединяет два понятия: | ||
+ | DB-API определяет интерфейс прикладной программы с базой данных. Этот интерфейс должен реализовывать все модули расширения, | ||
+ | служат для связи Python-программ с базами данных. Единый API позволяет абстрагироваться от марки используемой базы данных, | ||
+ | необходимости довольно легко менять одну СУБД на другую, | ||
+ | * Ссылка на описание текущей версии DB-API: [[http:// | ||
+ | * Ссылка на список поддерживаемых БД, через модули расширения [[http:// | ||
+ | * Модуль расширения **pysqlite** [[http:// | ||
+ | |||
+ | ==== Объект-курсор ==== | ||
+ | < | ||
+ | Курсор (от англ. cursor - CURrrent Set Of Records, текущий набор записей) служит для | ||
+ | работы с результатом запроса. Результатом запроса обычно является одна или несколько | ||
+ | прямоугольных таблиц со столбцами-полями и строками-записями. Приложение может | ||
+ | читать и обрабатывать полученные таблицы и записи в таблице по одной, поэтому в | ||
+ | курсоре хранится информация о текущей таблице и записи. Конкретный курсор в любой | ||
+ | момент времени связан с выполнением одной SQL-инструкции. | ||
+ | Атрибуты объекта-курсора тоже определены DB-API: | ||
+ | | ||
+ | fetchmany(). По умолчанию равен 1. | ||
+ | | ||
+ | параметрами из изменчивой последовательности params. Хранимая процедура может | ||
+ | изменить значения некоторых параметров последовательности. Метод может | ||
+ | возвратить результат, | ||
+ | | ||
+ | | ||
+ | последовательностью из семиэлементных последовательностей. Каждая из этих | ||
+ | последовательностей содержит информацию, | ||
+ | результата: | ||
+ | | ||
+ | Первые два элемента (имя и тип) обязательны, | ||
+ | вывода, | ||
+ | значения) может быть значение None. Этот атрибут может быть равным None для | ||
+ | операций, | ||
+ | | ||
+ | СУБД. Параметры (parameters) могут быть представлены в принятой в базе данных | ||
+ | нотации в соответствии с атрибутом paramstyle, описанным выше. | ||
+ | | ||
+ | команд, | ||
+ | задает последовательность наборов параметров. | ||
+ | | ||
+ | | ||
+ | запроса в виде последовательности последовательностей. Пустая | ||
+ | последовательность означает отсутствие данных. Необязательный параметр size | ||
+ | указывает количество возвращаемых записей (реально возвращаемых записей | ||
+ | может быть меньше). По умолчанию size равен атрибуту arraysize объекта- | ||
+ | курсора. | ||
+ | | ||
+ | результата запроса или None при отсутствии данных. | ||
+ | | ||
+ | результате запроса (при этом часть записей в предыдущем наборе может остаться | ||
+ | непрочитанной). Если наборов больше нет, возвращает None. Не все базы данных | ||
+ | поддерживают возврат нескольких наборов результатов за одну операцию. | ||
+ | | ||
+ | последнего запроса. В случае отсутствия execute-запросов или невозможности | ||
+ | указать количество записей равен -1. | ||
+ | | ||
+ | используемых в операциях. Аргумент sizes задает последовательность, | ||
+ | элемент соответствует одному входному параметру. Элемент может быть объектом- | ||
+ | типом соответствующего параметра или целым числом, | ||
+ | также может иметь значение None, если о размере входного параметра ничего | ||
+ | нельзя сказать заранее или он предполагается очень большим. Метод должен быть | ||
+ | вызван до execute-методов. | ||
+ | | ||
+ | параметра из столбца с номером column. Если column не задан, метод устанавливает | ||
+ | размер для всех больших выходных параметров. Может использоваться, | ||
+ | для получения больших бинарных объектов (Binary Large Object, BLOB). | ||
+ | </ | ||
+ | ==== Типы данных в SQLite version 3.0==== | ||
+ | **Типы данных в DB-API:** | ||
+ | |||
+ | Спецификация [[http:// | ||
+ | |||
+ | ^Объект ^Тип | ||
+ | ^STRING |Строка и символ | ||
+ | ^BINARY |Бинарный объект | ||
+ | ^NUMBER |Число | ||
+ | ^DATETIME |Дата и время | ||
+ | ^ROWID |Идентификатор записи | | ||
+ | ^None |NULL-значение (отсутствующее значение) | | ||
+ | |||
+ | С каждым типом данных (в реальности это - классы) связан конструктор. Совместимый с DB-API модуль должен определять следующие конструкторы: | ||
+ | * Date(год, | ||
+ | * Time(час, | ||
+ | * Timestamp(год, | ||
+ | * DateFromTicks(secs) Дата в виде числа секунд secs от начала эпохи (1 января 1970 года). | ||
+ | * TimeFromTicks(secs) Время, то же. | ||
+ | * TimestampFromTicks(secs) Дата-время, | ||
+ | * Binary(string) Большой бинарный объект на основании строки string. | ||
+ | |||
+ | **Типы данных в SQLite version 3.0:** | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Типы данных полей таблиц в SQLite -**декларативные**, | ||
+ | |||
+ | Чтобы избежать путаницы для типов данных полей таблиц лучше использовать базовые типы данных SQLite: | ||
+ | ^Объект ^Тип | ||
+ | ^NULL |базовый | ||
+ | ^INTEGER |базовый | ||
+ | ^REAL|базовый | ||
+ | ^TEXT |базовый | ||
+ | ^BLOB |базовый | ||
+ | ^ |базовый | ||
+ | |||
+ | Значительные отличия между SQLite и другими базами данных находятся в самом движке. В отличие от других БД в SQLite нет привязки к типам; все данные сохраняются как строки оканчивающиеся символом NULL, что лучше, чем двоичное представление данных в столбцах специального типа. По причине совместимости SQLite поддерживает тип спецификации в конструкциях CREATE TABLE, например, | ||
+ | |||
+ | " | ||
+ | |||
+ | **Примеры**: | ||
+ | < | ||
+ | $ sqlite3 | ||
+ | SQLite version 3.6.10 | ||
+ | Enter " | ||
+ | Enter SQL statements terminated with a ";" | ||
+ | sqlite> | ||
+ | </ | ||
+ | < | ||
+ | sqlite> select typeof(314), | ||
+ | integer|real|text|blob | ||
+ | </ | ||
+ | < | ||
+ | sqlite> select CURRENT_DATE, | ||
+ | 2009-09-20|11: | ||
+ | </ | ||
+ | < | ||
+ | sqlite> select typeof(CURRENT_DATE), | ||
+ | text|text|text | ||
+ | </ | ||
+ | < | ||
+ | sqlite> create table test (i integer, r real, t text, b blob); | ||
+ | sqlite> insert into test values (3142, 3142, 3142, 3142); | ||
+ | sqlite> insert into test values (3.142, 3.142, 3.142, 3.142); | ||
+ | sqlite> insert into test values (' | ||
+ | sqlite> insert into test values (x' | ||
+ | sqlite> insert into test values (null, null, null, null); | ||
+ | |||
+ | sqlite> select rowid, i, r, t, b from test; | ||
+ | 1|3142|3142.0|3142|3142 | ||
+ | 2|3.142|3.142|3.142|3.142 | ||
+ | 3|3.142|3.142|3.142|3.142 | ||
+ | 4|1B|1B|1B|1B | ||
+ | 5|||| | ||
+ | |||
+ | sqlite> select rowid, typeof(i), typeof(r), typeof(t), typeof(b) from test; | ||
+ | 1|integer|real|text|integer | ||
+ | 2|real|real|text|real | ||
+ | 3|real|real|text|text | ||
+ | 4|blob|blob|blob|blob | ||
+ | 5|null|null|null|null | ||
+ | |||
+ | sqlite> .quit | ||
+ | </ | ||
+ | |||
+ | ===== Пример: | ||
+ | В случае с SQLite заботиться о создании базы данных не нужно, файл будет создан автоматически. Для других баз данных необходимо перед этим создать базу данных, | ||
+ | - Создание из командной строки. Пусть у нас есть файл dbcreate164.sql, | ||
+ | BEGIN TRANSACTION; | ||
+ | CREATE TABLE testqualuty (code NUMERIC, countryall TEXT, date NUMERIC, maxe164 NUMERIC, mine164 NUMERIC, rprice NUMERIC); | ||
+ | COMMIT;</ | ||
+ | - Создание БД test.db через [[CLI]] SQLite< | ||
+ | SQLite version 3.6.10 | ||
+ | Enter " | ||
+ | Enter SQL statements terminated with a ";" | ||
+ | sqlite> CREATE TABLE testqualuty (code NUMERIC, countryall TEXT, date NUMERIC, maxe164 NUMERIC, mine164 NUMERIC, rprice NUMERIC); | ||
+ | sqlite> .quit</ | ||
+ | - Создание из Python <file python> | ||
+ | # Импортируем библиотеку, | ||
+ | import sqlite3 | ||
+ | |||
+ | # Создаем соединение с нашей базой данных | ||
+ | # В нашем примере у нас это просто файл базы | ||
+ | conn = sqlite3.connect(' | ||
+ | |||
+ | # Создаем курсор - это специальный объект который делает запросы и получает их результаты | ||
+ | cursor = conn.cursor() | ||
+ | |||
+ | # ТУТ БУДЕТ НАШ КОД РАБОТЫ С БАЗОЙ ДАННЫХ | ||
+ | # КОД ДАЛЬНЕЙШИХ ПРИМЕРОВ ВСТАВЛЯТЬ В ЭТО МЕСТО | ||
+ | |||
+ | # Не забываем закрыть соединение с базой данных | ||
+ | conn.close() | ||
+ | </ | ||
+ | |||
+ | ====== Ссылки ====== | ||
+ | * [[SQLite, Python - способы хранения, | ||
+ | * [[http:// |
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга