Выбор правильной базы данных для вашего приложения очень важен, особенно для бэкэнд-приложений, которые взаимодействуют с базой данных напрямую. Существует множество вариантов, каждый из которых подходит для определенных случаев использования и отличается по цене, скорости и возможностям масштабирования.
Язык Python обычно используется в приложениях с большим объемом данных, поскольку в нем есть мощные библиотеки для работы с данными, поэтому база данных, которую вы используете для приложения на Python, имеет большое значение.
В этой статье мы сравним MariaDB с другими технологиями баз данных, такими как MySQL и PostgreSQL, и обсудим, почему она является отличным выбором при использовании Python.
Почему MariaDB так хороша для Python?
Благодаря мощным библиотекам для работы с данными и машинного обучения, Python является популярным языком программирования для специалистов по обработке данных - особенно в области data engineering и data science. Обе сферы имеют дело с большими объемами данных, что увеличивает потребность в хранении, памяти и вычислительной мощности.
Стоимость лицензирования часто растет вместе с объемом данных, поэтому имеет смысл использовать базу данных с открытым исходным кодом. Вы также можете сэкономить на аппаратном обеспечении. Поскольку вы полностью контролируете, где будет развернуто приложение, вы можете найти самые дешевые решения в облаке или в локальной сети.
Существует множество баз данных с открытым исходным кодом, включая реляционные, NoSQL и графовые базы данных. Реляционные базы данных, как правило, отлично подходят для структурирования и согласованности, в то время как базы данных NoSQL, которые обеспечивают быструю разработку, созданы для большей гибкости.
Хотя Python прекрасно работает с базами данных NoSQL, реляционные базы данных лучше подходят для аналитики и обработки больших объемов данных, которые обычно используются в Python.
Давайте сравним MariaDB с некоторыми другими популярными реляционными базами данных с открытым исходным кодом.
MariaDB 🤝 Python: Мощный дуэт для вашего бэкенда. Узнайте, почему MariaDB превосходит MySQL и Postgres.
Наиболее популярными реляционными базами данных с открытым исходным кодом являются MariaDB, SQLite, MySQL и PostgreSQL. Каждая из них обладает схожим набором основных технических возможностей, но у MariaDB есть несколько уникальных особенностей, которые делают ее наиболее подходящей для приложений на Python.
Кроме того, MariaDB имеет открытый исходный код, поэтому ее возможности не зависят от сторонних организаций, таких как MySQL, которой сейчас владеет Oracle. Хотя сообщество разработчиков с открытым исходным кодом все еще может предлагать и добавлять функции в MySQL, Oracle (у которой есть конкурирующая база данных) решает, куда ей двигаться.
С другой стороны, MariaDB была создана после того, как Oracle приобрела MySQL, чтобы продолжить подход к разработке под руководством сообщества. В результате MariaDB обладает более богатым набором функций, включая большее количество движков хранения данных, которые обеспечивают более высокую производительность запросов и репликации по сравнению с MySQL. Такая производительность важна при работе с большими массивами данных.
Причины использования MariaDB вместо PostgreSQL немного более тонкие, поскольку PostgreSQL также создается сообществом. Однако PostgreSQL использует свою собственную BSD-подобную лицензию, PostgreSQL License, которая более свободна, чем GNU-лицензия MariaDB, и позволяет пользователям создавать расширения с закрытым исходным кодом.
Хотя они приносят пользу пользователю, создавшему расширение, эти функции не всегда используются в основной базе данных PostgreSQL, а разработчики могут даже взимать плату за использование своих расширений. Лицензирование MariaDB и MySQL GNU не позволяет приватизировать новые возможности - вся новая функциональность находится в свободном доступе.
MariaDB и PostgreSQL имеют самые богатые наборы функций. Однако у MariaDB есть несколько удобных функций для бэкенда на Python. Например, MariaDB использует один язык для взаимодействия со всеми своими различными движками хранения - системы OLAP и OLTP управляются с помощью одного и того же синтаксиса, что снижает нагрузку на разработчиков.
Ваш бэкенд на Python может записывать транзакционные данные в MariaDB, которая может скопировать их в механизм хранения, более подходящий для аналитических запросов. Разработчики могут писать аналитические запросы к реплике, используя тот же синтаксис для повышения производительности.
MariaDB также недавно представила f-String-подобное форматирование строк, аналогичное Python. Это избавляет разработчиков, использующих MariaDB вместе с Python, от необходимости мысленно переключаться между языками.
MariaDB Python Connector
До 2020 года программисты на Python подключались к MariaDB через пакет MySQL Python. Это было возможно, потому что MariaDB является форком MySQL, но это означало, что соединения MariaDB вели себя так же, как и MySQL.
В 2020 году был выпущен нативный коннектор для MariaDB, чтобы устранить зависимость от MySQL и предоставить больше контроля сообществу разработчиков MariaDB. Вы можете установить коннектор с помощью pip, менеджера пакетов Python, и использовать его для всех распространенных случаев использования CRUD.
Управление всеми операциями осуществляется через объект курсора. По умолчанию курсор MariaDB принимает запросы как подготовленные операторы, так что вы можетеВы можете дезинфицировать любые динамические части запроса. Это безопаснее, чем форматирование строк для построения запросов, которое делает ваше приложение уязвимым для атак SQL-инъекций.
Принцип работы коннектора
Коннектор прост в использовании. Сначала вы импортируете библиотеку коннектора MariaDB в свое приложение и используете следующую функцию для подключения к серверу базы данных MariaDB:
import mariadb
try:
connection = mariadb.connect(
user=username,
password=password,
host=mariadb_host,
port=3306,
database="sales"
)
except mariadb.Error as err:
print(f"An error occurred while connecting to MariaDB: {err}")
После подключения все запросы выполняются через объект курсора. Вы получаете объект курсора, а затем используете его для отправки запросов.
cursor = conn.cursor()
Чтобы отправить запрос в виде подготовленного оператора, используйте вопросительный знак в тексте запроса и передайте необходимые значения в виде кортежа.
ur.execute(
"SELECT * FROM sales WHERE sale_date >= ? and price > ?",
(sale_date_val, price_val)
)
Входные значения из кортежа заменяют вопросительные знаки в порядке слева направо. Эти входные значения также подвергаются санитарной обработке для предотвращения SQL-инъекций. Встроенная защита от SQL-инъекций полезна для такого языка, как Python, разработанного с учетом интересов начинающих программистов.