Базы данных и их использование в приложениях на Python
В данной статье мы рассмотрим, что такое базы данных и какие из них чаще всего используются, если речь идет о разработке на Python.
Пожалуй, начнем с определения. База данных – это абстракция над файловой системой операционной системы, которая значительно упрощает создание приложений, создающих, читающих, обновляющих и удаляющих различные данные.
Зачем нужны базы данных?
На высоком уровне веб-приложения хранят данные и представляют их пользователям в удобном виде. Например, Google хранит данные о дорогах и предоставляет маршруты для проезда из одного места в другое при каждом использовании вами Google Maps. Строить такие маршруты движения возможно благодаря тому, что данные хранятся в структурированном формате.
Базы данных делают структурированное хранилище надежным и быстрым. Они также дают представление о том, как данные должны сохраняться и извлекаться. В результате, создавая каждое новое приложение, вы не обдумываете заново, что делать с данными.
Для управления созданием и использованием баз данных создано много реализаций СУБД — систем управления базами данных. Примеры СУБД — PostgreSQL, MySQL, SQLite. Также существуют нереляционные базы данных — NoSQL.
Реляционные базы данных
В веб-разработке на Python чаще всего используются реляционные базы данных.
В этих базах данные хранятся в виде серии таблиц. Взаимосвязи между таблицами создаются при помощи внешних ключей. (Само определение «реляционные» происходит от англ. relations — «связи, отношения», — прим. перев.)
Внешний ключ – это уникальная ссылка из одной строки в реляционной таблице на другую строку, которая чаще всего находится в другой таблице, хотя может быть и в той же самой.
Реализации хранилищ баз данных различаются по сложности. SQLite — СУБД, встроенная в Python — создает один файл для всех данных каждой базы данных.
Другие СУБД, такие как PostgreSQL, MySQL, Oracle и Microsoft SQL Server, имеют более сложные схемы хранения. Кроме того, они предлагают дополнительные расширенные функции, полезные для хранения данных веб-приложений. Например:
- Репликация данных между главной базой данных и одним или несколькими подчиненными экземплярами, доступными только для чтения.
- Расширенные типы столбцов, которые могут эффективно хранить полуструктурированные данные, такие как JSON (JavaScript Object Notation).
- Сегментирование, которое позволяет горизонтально масштабировать несколько баз данных, каждая из которых служит экземпляром для чтения и записи, за счет задержки в согласованности данных.
- Мониторинг, статистика и другая полезная информация о выполнении для схем и таблиц базы данных.
Обычно веб-приложения начинаются с одного экземпляра базы данных, например PostgreSQL, с простой схемой. Со временем схема базы данных превращается в более сложную структуру с использованием миграций. При этом возрастает потребность в расширенных функциях, таких как репликация, сегментирование и мониторинг, поскольку использование базы данных становится более интенсивным.
Наиболее распространенные базы данных для веб-приложений на Python
PostgreSQL и MySQL – две наиболее распространенные базы данных с открытым исходным кодом для хранения данных веб-приложений на Python.
SQLite – это база данных, которая хранится в одном файле на диске. SQLite встроена в Python, но предназначена только для доступа по одному соединению за раз. Поэтому настоятельно рекомендуется не запускать производственное веб-приложение с SQLite. Эта база данных хороша для учебных проектов, когда вы только осваиваете, как всё работает.
Для продакшена же лучше использовать PostgreSQL или MySQL, или другую базу данных, в том числе нереляционную – всё зависит от специфики вашего приложения.
База данных PostgreSQL
PostgreSQL – это рекомендуемая реляционная СУБД для работы с веб-приложениями на Python. Функционал PostgreSQL, его активное развитие и улучшение, а также стабильность послужили причиной использования этой СУБД в бэкенде миллионов приложений, существующих сегодня в сети.
База данных MySQL
MySQL – еще одна практичная реализация СУБД для приложений, написанных на Python. Имеет открытый исходный код.
MySQL проще в освоении, чем PostgreSQL, но не так богата функциями.
Подключение к базе данных с помощью Python
Для работы с реляционной базой данных с использованием Python нужны библиотеки. Наиболее распространенные библиотеки для реляционных баз данных:
- psycopg2 (исходный код) для PostgreSQL.
- MySQLdb (исходный код) для MySQL. Обратите внимание, что разработка этого драйвера в основном заморожена. Поэтому будет целесообразно обратить внимание на альтернативные варианты, если в бэкенде вашего приложения используется MySQL.
- cx_Oracle (исходный код) для Oracle Database.
Поддержка SQLite встроена во все версии Python 2.7+, поэтому отдельная библиотека для подключения не требуется. Просто импортируйте sqlite3 ( import sqlite3 ), и можно начинать работатьтоirметоyey.
Объектно-реляционное отображение
Объектно-реляционное отображение (англ. object-relational mapping, ORM) позволяет разработчикам получать доступ к данным из бэкенда при помощи Python-кода, а не SQL-запросов. Все структуры веб-приложений по-разному обрабатывают интеграцию ORM. По объектно-реляционному отображению есть множество ресурсов, так что вы без проблем разберетесь в этой теме.
Размещение баз данных на стороннем сервере
Многие компании предлагают свои серверы для хостинга баз данных. В услугах, предоставляемых такими компаниями, часто есть автоматическое резервное копирование и восстановление, усиленные настройки безопасности и простое вертикальное масштабирование.
- Amazon Relational Database Service (RDS) предоставляет предварительно настроенные экземпляры MySQL и PostgreSQL. Экземпляры можно масштабировать до больших или меньших конфигураций в зависимости от требований к хранилищу и производительности.
- Google Cloud SQL – это сервис для работы с серверами MySQL, PostgreSQL и SQL. Позволяет управлять базами данных, делать бэкапы, репликации и вносить автоматические исправления. Cloud SQL интегрируется с Google App Engine, но также может использоваться и независимо.
- BitCan предоставляет размещение баз данных MySQL и MongoDB с обширными услугами резервного копирования.
- ElephantSQL – это SaaS-компания, которая размещает базы данных PostgreSQL и управляет конфигурацией сервера, резервным копированием и подключением к данным поверх экземпляров Amazon Web Services.
Полезные источники для изучения баз данных
Для того, чтобы хорошенько разобраться в базах данных, вам потребуется немало времени для изучения различных книг и туториалов. Ниже вы можете ознакомиться со списком книг и видеокурсов по данной тематике.
Книги для изучения баз данных:
- «Изучаем SQL», автор — Алан Бьюли. Эта книга отлично подойдет для новичков, только начинающих знакомиться с обширным миром баз данных.
- «SQL», автор — Крис Фиайли. В этой книге подробно и на примерах разбирается использование языка запросов SQL для решения разных задач.
- «SQL. Сборник рецептов», автор — Энтони Молинаро. Данное пособие подойдет тем, кто уже имеет определенные знания об SQL и хочет развивать свои навыки.
- «SQL. Библия пользователя», авторы — Алекс Кригель и др., 2-е издание. Уникальность книги в том, что в ней приведены примеры реализации различных запросов на трех основных диалектах ведущих СУБД.
- «Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL», авторы — Эрик Редмонд, Джим Р. Уилсон. В данной книге рассказывается в основном о нереляционных базах данных. Вы узнаете об особенностях таких СУБД, как Redis, Neo4J, CouchDB, MongoDB, HBase, PostgreSQL и Riak.
- «Работа с PostgreSQL: настройка и масштабирование», автор — А. Ю. Васильев. Это справочник по настройке и масштабированию PostgreSQL и тонкостям его использования.
Видеокурсы:
Если же вы больше предпочитаете видеоуроки и курсы, то существует множество источников для любого уровня подготовки. Ниже приведены примеры таких источников. Они в основном рассчитаны для новичков:
- Основы баз данных
- Изучение SQL для начинающих
- Видеокурс по базам данных от Технопарка
- Python and MySQL: Database Manipulation with Python
Контрольный чеклист для изучения баз данных
- Установите PostgreSQL на свой сервер или персональный компьютер. Если вы используете Ubuntu, запустите sudo apt-get install postgresql .
- Убедитесь, что в зависимостях вашего приложения есть библиотека psycopg2.
- Настройте свое веб-приложение для подключения к экземпляру PostgreSQL.
- Создавайте модели в ORM с помощью встроенного ORM Django или SQLAlchemy с Flask.
- Создайте таблицы своей базы данных или синхронизируйте модели ORM с экземпляром PostgreSQL, если вы используете ORM.
- Начните создавать, читать, обновлять и удалять данные в базе данных из вашего веб-приложения.
Заключение
В этой статье мы кратко рассказали про базы данных в Python. Обсудили, какие они бывают и в чем особенности использования той или иной СУБД. Также мы дали вам подборки книг и видеоматериалов для дальнейшего изучения баз данных. Надеемся, что вам все это пригодится. Успехов в освоении баз данных и написании кода!
Выбор базы данных для новичка в Python и БД [закрыт]
Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 7 лет назад .
Слышал много про разные типы базы данных от кажется SimpleBD (в одном файле), до MySQL, Postgresql. Как они работают (в целом со стороны) я понимаю на уровне пользователя. Но вот язык общения с ними (sql запросы для меня почти темный лес). Хочется иметь несложную в настройке\администрировании БД, к которой легко писать запросы из python скрипта, получать данные, загружать данные. Все это нужно для обучения, личного\рабочего использования, не направленного на масс-use (высоко-нагруженные сайты). Вопрос: Поделитесь опытом с какой из БД и библиотекой в python проще всего взаимодействовать с данными для новичка, что бы не вылазило по 10-20 ошибок, из за сложного синтаксиса запросов в котором нужно очень долго разбираться. Правильно ли я понимаю что самая распространенная это MySQL и под нее можно найти больше примеров\видео уроков?
Отслеживать
задан 31 мар 2016 в 23:54
992 3 3 золотых знака 10 10 серебряных знаков 24 24 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Собственно всё, что нужно знать для работы с SQLite:
### SQL QUERIES ### selAll = "SELECT * FROM tasks" createCommand = """ # Создать таблицу CREATE TABLE tasks ( id INTEGER PRIMARY KEY, 'Задача' NVARCHAR(1000), 'Подзадача' NVARCHAR(1000), 'Сотрудник' NVARCHAR(50), 'Дата' DATE, 'Статус' NVARCHAR(200), 'Коммент' NVARCHAR(1000), 'Тек статус' NVARCHAR(30), 'Осталось' INTEGER );""" searchText = """ # Искать в таблице SELECT * FROM tasks WHERE Задача like "%%" OR Подзадача like "%%" OR Сотрудник like "%%";""" insertText = """ # Внести новые данные в таблицу INSERT INTO tasks (ID, 'Задача', 'Подзадача', 'Сотрудник', 'Дата', 'Статус', 'Коммент', 'Тек статус' ) VALUES (NULL, "", "", "", "", "", "", "" );""" deleteText = "DELETE FROM tasks WHERE # Удалить некоторые данные updateText = """UPDATE tasks # Отредактировать данные SET 'Задача'="", 'Подзадача'="", 'Сотрудник'="", 'Дата'="", 'Статус'="", 'Коммент'="", 'Тек статус'="" WHERE >Использование в Питоне. Создание таблицы:
connection = sqlite3.connect(dbfile) cursor = connection.cursor() try: cursor.execute(createCommand) except sqlite3.OperationalError: pass
Вставка данных из словаря (newRecordDict) в таблицу:
insertCommand = insertText.format( tsk=newRecordDict["Задача"], stsk=newRecordDict["Подзадача"], prsn=newRecordDict["Сотрудник"], dt=newRecordDict["Дата"], stts=newRecordDict["Статус"], cmt=newRecordDict["Коммент"], crsts=newRecordDict["Тек статус"] ) cursor.execute(insertCommand) connection.commit()
Модели
Для хранения данных в веб-приложении, как правило, применются базы данных. И фреймворк Django уже по умолчанию предоставляет удобный функционал для работы с различными системами баз данных.
Настройки подключения к базе данных
По умолчанию Django в качестве базы данных использует SQLite. Она очень проста в использовании и не требует запущенного сервера. Все файлы базы данных могут легко переноситься с одного компьютера на другой. Однако при необходимости мы можем использовать в Django большинство распространенных СУБД.
Для работы с базами данных в проекте Django в файле settings.py определен параметр DATABASES , который по умолчанию выглядит следующим образом:
DATABASES = < 'default': < 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', >>
Переменная DATABASES содержит набор конфигураций подключений к базам данных в виде словаря. Ключи в этом словаре — названия подключений. То есть мы можем определить кучу подключений. Но как минимум одно подключение должно быть определено в переменной DATABASES — подключение с именем default , которое представляет подключение по умолчанию.
Конфигурация каждого подключения может состоять из ряда параметров. По умолчанию указываются только два параметра. Параметр ENGINE указывает на используемый движок для доступа к БД. В данном случае это встроенный пакет django.db.backends.sqlite3 .
Второй параметр — NAME указывает на путь к базе данных. По умолчанию база данных называется db.sqlite3 . Для установки пути используется каталог из переменной BASE_DIR, которая задана в начале файла:
BASE_DIR = Path(__file__).resolve().parent.parent
По умолчанию BASE_DIR указывает на каталог, в котором находится папка проекта. И после первого запуска проекта в указанном каталоге по умолчанию будет создан файл db.sqlite3 , который собственно и будет использоваться в качестве базы данных.
Поддерживаемые субд
Чтобы использовать другие системы управления базами данных, необходимо будет установить соответствующий пакет.
Какую БД выбрать
Доброго времен суток.
Я разворачиваю LAMP сервер с питоном вместо пхп
В базе данных должен быть пользователь, который отправляет на сервер данные:
1. ID устройства
2. Картинка с камеры
На сервере происходит обработка изображения, и обработка данных.
БД должна хранить данные пользователей и пару полей с результатами обработки изображений
Сервер также будет обращаться к этой БД для того чтобы отдать данные приложению.
Какая БД с несложной СУБД для этой задачи подойдет оптимально? Чтобы дружила с питоном
без больших дополнительных танцев с бубном.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Какую среду выбрать
Добрый день. Есть задача создать программу, которая: 0. Будет иметь 2 варианта: для Windows и.

Какую платформу выбрать?
Добрый день, коллеги! Поручили задание, сделать приложение для удобного хранения файлов и данных.
Подскажите какую технологию выбрать
Здравствуйте ув. форумчане. Появилась идея сделать автоматизированную систему отопления у себя в.
Какую область применения выбрать?
Доброго времени суток, хочу попросить совета экспертов. Вопрос в том, что я не знаю в какую область.

Что выбрать — WPF .Net Core или WPF .Net Framework + буду работать с SQLite (также интересно какую версию БД выбрать)?
Всем привет. Ниже необязательная предыстория, высказался просто) Тут наконец вновь взялся за.
Просто Лис
![]()
5321 / 3335 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9
Вообще любую СУБД бери. Хоть sqlite. Для питона лучше найди ORM-библиотеку, но можно и sql-запросы писать.
Добавлено через 50 секунд
mysql, posgresql, oracle (для этой бубен нужен).
