training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как создать базу sqlite Python

Создано: 23 октября 2017Автор: Егор Астапов8045 просмотровСложность: легкий

Как создать базу данных sqlite при помощи модуля sqlite Python. Мне пришлось познакомиться с этой базой совсем недавно. Скажу так, что я её недооценивал и зря. Она обладает неплохим набором возможностей. Вы сможете хранить данные с разными типами:

  • NULL. Пустое значение в таблице базы.
  • INTEGER. Целочисленное значение, хранящееся в 1, 2, 3, 4, 6 или 8 байтах, в зависимости от величины самого значения.
  • REAL. Числовое значение с плавающей точкой. Хранится в формате 8-байтного числа IEEE с плавающей точкой.
  • TEXT. Значение строки текста. Хранится с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE)
  • BLOB. Значение бинарных данных, хранящихся точно в том же виде, в каком были введены.

Вы не сможете использовать эту базу для сайтов с большой посещаемостью. В случае приличной нагрузки база может заблокироваться и транзакции на будут проходить. У этой базы есть один большой плюс. Она легко разворачивается. Вам нужно подключить питоновский модуль 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.

Комментарии

реклама