Как создать базу данных sqlite при помощи модуля sqlite Python. Мне пришлось познакомиться с этой базой совсем недавно. Скажу так, что я её недооценивал и зря. Она обладает неплохим набором возможностей. Вы сможете хранить данные с разными типами:
Вы не сможете использовать эту базу для сайтов с большой посещаемостью. В случае приличной нагрузки база может заблокироваться и транзакции на будут проходить. У этой базы есть один большой плюс. Она легко разворачивается. Вам нужно подключить питоновский модуль sqlite3 и подключится к файлу. Если файла базы данных нет, то он будет создан согласно указанному пути. Эта база подходит для простых скриптов. У питона есть базы подобные sqlite, но там не просто просмотреть содержимое таблиц. Если вы используете Linux, то существуют менеджеры для работы с базой данных sqlite. В них удобно просматривать записи в таблицах.
Давайте подключим модуль sqlite и создадим базу database.db. Если у вас нет модуля sqlite, то воспользуйтесь pip. Более подробно о работе pip написано на странице Как загружать библиотеки с pip Python.
#установка модуля
pip install sqlite3
Если у вас нет файла database.db, то функция connect() создаст его. Не создавайте файл руками (touch database.db). Вся база данных находится в одном файле. Этот файл легко добавить в коммит git. Можете поставить исключение в .gitignore и изменения в базе не будет фиксировать git. Функция cursor() создает объект для выполнения sql команд. Через этот объект осуществляется как выборка, так и запись таблиц. Функция executescript() позволяет запустить большой скрипт для создания таблиц в базе. Вы можете не только создать таблицы, но и наполнить их своими записями. В конце необходимо зафиксировать изменения при помощи функции commit(). Всегда выполняйте эту функцию для фиксирования изменений.
#!/usr/bin/python3
import sqlite3
import os
name_db = 'database.db'
cur_dir = os.getcwd()
path_db = os.path.join(cur_dir, name_db)
# проверка на существование базы данных
if not os.path.exists(path_db):
try:
#создание базы данных + создание таблиц
conn = sqlite3.connect(path_db)
# если не сработает, то sudo chmod 777 ./database.db
# os.popen('sudo chmod 777 ' + path_db).read()
cursor = conn.cursor()
#создание таблиц + наполнение
cursor.executescript("""
BEGIN TRANSACTION;
CREATE TABLE "user" (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT,
`id_lang` INTEGER,
`changed` TEXT
);
INSERT INTO `user` (name, id_lang, changed)
VALUES('Егор',1, DATETIME('now'));
INSERT INTO `user` (name, id_lang, changed)
VALUES('Иван',2, DATETIME('now'));
CREATE TABLE "lang" (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT,
`changed` TEXT
);
INSERT INTO `lang` (name, changed)
VALUES('python',DATETIME('now'));
INSERT INTO `lang` (name, changed)
VALUES('ruby',DATETIME('now'));
COMMIT;
""")
# фиксирую коммит
conn.commit()
except sqlite3.Error as e:
print('Ошибка БД: ' + str(e))
Обратите внимание на то, что функция DATETIME('now') генерирует текущее время. Я не проставляю ID вручную, потому что это поле PRIMARY KEY AUTOINCREMENT. Оно увеличивается само на единицу.
Если у вас возникнет ошибка при создании базы данных sqlite, то сработает перехват ошибок. Функция print() выведет в консоли название ошибки на английском языке.
Теперь давайте проверим наличие и содержимое базы данных sqlite. Если вы работаете в линукс то открывайте консоль. Проберитесь в папку с базой данных sqlite и подключитесь к базе данных. Далее можете вводить команды. Прилагаю таблицу основных команд:
команда | описание |
---|---|
.show | Показывает текущие настройки заданных параметров |
.databases | Показывает название баз данных и файлов |
.quit | Выход из sqlite3 |
.tables | Показывает текущие таблицы |
.schema | Отражает структуру таблицы |
.header | Отобразить или скрыть шапку таблицы |
.mode | Выбор режима отображения данных таблицы |
.dump | Сделать копию базы данных в текстовом формате |
#подключение к базе данных
sqlite3 database.db
# у вас должен поменяться курсор на sqlite>
# вывод названий баз данных и файлов
.databases
# вывод:
#seq name file
#--- --------------- ----------------------------------------------------------
#0 main /.../python/module/sqlite/database.
У нас должно быть 2 таблицы lang, user. Давайте осмотрим результат.
#подключение к базе данных
sqlite3 database.db
# у вас должен поменяться курсор на sqlite>
#просмотр схем всех таблиц
.schema
# вывод:
#CREATE TABLE "lang" (
# `id` INTEGER PRIMARY KEY AUTOINCREMENT,
# `name` TEXT,
# `changed` TEXT
# );
#CREATE TABLE "user" (
# `id` INTEGER PRIMARY KEY AUTOINCREMENT,
# `name` TEXT,
# `id_lang` INTEGER,
# `changed` TEXT
# );
Выводим записи таблицы user и lang
#подключение к базе данных
sqlite3 database.db
# у вас должен поменяться курсор на sqlite>
# выборка всех столбцов из таблицы
select * from user;
#вывод:
#1|Егор|1|2017-10-24 11:15:30
#2|Иван|2|2017-10-24 11:15:30
# выборка всех столбцов из таблицы
select * from lang;
#вывод:
#1|python|2017-10-24 11:15:30
#2|ruby|2017-10-24 11:15:30
Создадим еще одну таблицу comment средствами bash.
#подключение к базе данных
sqlite3 database.db
# у вас должен поменяться курсор на sqlite>
CREATE TABLE "comment" (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`test` TEXT,
`id_user` INTEGER,
`changed` TEXT
);
# точка с запятой на конце sql обязательна
# проверяем созданную таблицу comment
.table
#вывод:
comment
# схема таблицы
.schema comment
#вывод:
#CREATE TABLE "comment" (
#`id` INTEGER PRIMARY KEY AUTOINCREMENT,
#`text` TEXT,
#`id_user` INTEGER,
#`changed` TEXT);
Наполним таблицу comment
#подключение к базе данных
sqlite3 database.db
# у вас должен поменяться курсор на sqlite>
/* добавляем комментарии */
INSERT INTO comment ( text, id_user, changed )
VALUES ( 'комментарий от Егора', 1, DATETIME('now'));
Сменим настройки для удобного вывода данных.
#подключение к базе данных
sqlite3 database.db
# у вас должен поменяться курсор на sqlite>
# показать настройки
.show
#вывод:
# echo: off
# explain: off
# headers: on
# mode: column
#nullvalue: ""
# output: stdout
#separator: "|"
# width:
# показываем название столбцов
.headers ON
# показываем данные без разделителя. Разделителем становится отступ.
.mode columns
Выведем все записи таблицы comment
#подключение к базе данных
sqlite3 database.db
# у вас должен поменяться курсор на sqlite>
# выборка всех столбцов из таблицы
select * from comment;
#вывод:
#id text id_user changed
#---------- -------------------------------------- ---------- -------------------
#1 комментарий от Егора 1 2017-10-24 09:49:13
В этой статье мы создали таблицу средствами python наполнили её данными через консоль bash.