Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Микросервисы: подключение к базам данных из приложений на Python, Go и JavaScript

1190
27 минут чтения
Средний рейтинг статьи: 3

Сегодня базы данных используются практически в любых проектах. Взаимодействие с базами данных особенно хорошо знакомо системным администраторам, администраторам баз данных, DevOps/SRE и разработчикам программного обеспечения. И если администраторам, как правило, достаточно развернуть один или несколько инстансов СУБД и прописать необходимые данные для подключения базы данных к приложению или сервису, то разработчикам необходимо подключать базу данных непосредственно в самом коде разрабатываемого приложения. В сегодняшней статье мы подробно рассмотрим, как подключить базы данных в разных языках программирования.

Предварительные требования

В текущей статье мы рассмотрим примеры пяти баз данных — PostgreSQL, Redis, MongoDB, MySQL, ClickHouse, используя такие языки программирования как Python, Go и JavaScript.

  • Для подключения к базам данных нам понадобится один сервер или одна виртуальная машина с любым установленным дистрибутивом Linux. В данной статье будет использоваться дистрибутив Ubuntu 22.04. На сервер заранее нужно установить необходимую СУБД. 

    Инструкции по установке СУБД можно найти в наших туториалах: 

    PostgreSQL, Redis, MongoDB, MySQL, ClickHouse.

    Также для развертывания СУБД можно воспользоваться сервисом Облачные базы данных (База данных как сервис (DBaaS)). В следующем разделе мы рассмотрим использование данного сервиса.

  • Также при необходимости для PostgreSQL можно использовать клиентскую утилиту для работу с оболочкой psql. Для установки в ОС Ubuntu достаточно выполнить команды:

        
    apt update && apt -y install postgresql-client

Развертывание облачной базы данных

Чтобы быстро развернуть необходимую СУБД можно воспользоваться сервисом облачного провайдера Timeweb Cloud под названием «Облачные базы данных» в котором достаточно выбрать необходимую СУБД, характеристики сервера и заполнить информацию о базе – название БД и пароль пользователя. Рассмотрим использование сервиса на примере создания базы PostgreSQL.

  1. Проходим аутентификацию в личном кабинете по ссылке.

  2. На панели слева выбираем раздел «Базы данных»:
    Image11

  3. Нажимаем на кнопку «Создать»:
    Image23

  4. В разделе «Тип база данных» выбираем PostgreSQL:
    Image25

  5. Выбираем регион в котором будет находиться сервер баз данных. Чем меньше пинг от дата-центра к вашей локации тем меньше будет задержка до сервера с СУБД:
    Image38

  6. В разделе «Конфигурация» выбираем необходимую конфигурацию для сервера. В качестве теста можно выбрать минимальную конфигурацию:
    Image12

  7. Если сервер с СУБД должен быть доступен из внешней сети, то в  разделе «Сеть» можно арендовать публичный IPV4-адрес. В нашем случаем нам понадобится IPv4-адрес:
    Image10

  8. При необходимости можно задать свое имя для базы данных и свой пароль пользователя:
    Image27

  9. Для заказа сервиса СУБД необходимо нажать на кнопку «Заказать»:
    Image6

DBaaS

Запустите свою базу данных в облаке и
оптимизируйте процессы DevOps и CI/CD.
  1. После того как база данных будет создана, переходим в раздел «Подключение» где будет сгенерирована строка для подключения к базе данных. Строка подключения имеет следующий вид:

    
psql "postgresql://<имя_пользователя>:<пароль_пользователя>@адрес_базы_данных/<имя+базы данных>

Image5

Эти данные потребуются для подключения к соответствующим инстансам баз данных. Все остальные СУБД создаются по аналогии с примером для создания PostgreSQL.

Подключение к базам данных в Python

Для работы с MySQL существует официальный драйвер MySQL Connector.

1) Для начала установим драйвер при помощи менеджера пакетов pip:

    
pip install mysql-connector-python

Image17

2) Далее инициализируем новое соединение к серверу MySQL. Импортируем библиотеку mysql.connector и отдельно класс Error который в случае проблем с подключением будет выводить конкретную ошибку.

Создаем функцию с именем create_connection в которую передадим значения адреса БД (host), имени пользователя (user) и пароля пользователя (password). Чтобы произвести соединение создадим класс create_connection в который передадим имена переменных в которых хранятся данные для подключения к баз данных:

    
import mysql.connector from mysql.connector import Error def create_connection(host_name, user_name, user_password): connection = None try: connection = mysql.connector.connect( host="194.87.190.137", user="gen_user", password="m-EE6Wm}z@wCKe" ) print("Successfully connected to MySQL Server!") except Error as e: print(f"The error '{e}' occurred") return connection def execute_query(connection, query): cursor = connection.cursor() try: cursor.execute(query) connection.commit() print("Query executed successfully") except Error as e: print(f"The error '{e}' occurred") connection = create_connection("194.87.190.137", "gen_user", "m-EE6Wm}z@wCKe")

3) Запускаем скрипт. При успешном соединение с MySQL будет выведено сообщение «Successfully connected to MySQL Server!».

При наличие ошибок будет выведен код и описание ошибки.

4) Создадим новую таблицу. Подключаемся к базе данных используя класс connection.database в котором указываем имя базы данных. БД должна уже быть предварительно создана.

Для создания таблицы инициализируем переменную create_table_query в которой указываем SQL запрос CREATE TABLE. Для вставки данных инициализируем другую переменную insert_data_query в которой будет указан SQL запрос INSERT INTO. Для выполнения каждого запроса используется класс execute_query который принимает строку с соединением к БД и имя переменной с SQL запросом: 

    
connection.database = 'test_db' create_table_query = """ CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, age INT NOT NULL ) """ execute_query(connection, create_table_query) insert_data_query = """ INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25) """ execute_query(connection, insert_data_query) if connection.is_connected(): connection.close() print("Connection closed")

5) Запускаем скрипт:

Image19

Как можно увидеть данные были успешно созданы.

Подключение к базам данных в Go

Язык программирования Go является одним из самых молодых языков — он был разработан в 2009 году компанией Google. Go широко используется при разработке микросервисной архитектуры, а также для написания сетевых утилит. В частности, на Go написаны такие сервисы, как Docker и Kubernetes. 

Go поддерживает интеграцию со всеми популярными СУБД, включая PostgreSQL, Redis, MongoDB, MySQL, ClickHouse и многие другие.

Для работы с СУБД MySQL в Go используется драйвер go-sql-driver/mysql.

1) Создаем новый каталог, в котором будут храниться файлы проекта, и переходим в него: 

    
mkdirmysql-connect && cd mysql-connect

2) Создаем файл go.mod, в котором будут храниться зависимости:

    
go mod init golang-connect-mysql

3) Скачиваем драйвер mysql при помощи команды go get:

    
go get -u github.com/go-sql-driver/mysql

4) Создаем новый файл с именем main.go Данные для подключения к СУБД указаны в переменной dsn:

    
package main import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" ) func main() { dsn := "root:password@tcp(localhost:3306)/testdb" db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() if err := db.Ping(); err != nil { log.Fatal(err) } fmt.Println("Successfully connected to the database!") query := "INSERT INTO users (name, age) VALUES (?, ?)" result, err := db.Exec(query, "Alex", 25) if err != nil { log.Fatal(err) } lastInsertID, err := result.LastInsertId() if err != nil { log.Fatal(err) } fmt.Printf("Inserted data with ID: %d\n", lastInsertID) }

Подключение к базам данных в JavaScript

Язык JavaScript активно используется для создания динамических веб-сайтов. Стоит отметить что все подключения к сторонним сервисам включая СУБД осуществляются при помощи платформы Node.js. Убедитесь что на вашем устройстве установлен Node.js и пакетный менеджер npm.

Для работы с MySQL используется драйвер mysql2

1) Создаем директорию в которой будем хранить файлы проекта:

    
mkdir js-mysql-connect && cd js-mysql-connect

2) Инициализируем проект:

    
npm init -y

3) Устанавливаем библиотеку mysql2:

    
npm install mysql2

4) Для подключения к СУБД MySQL используем следующий код:

    
const mysql = require('mysql2'); const connection_to_mysql = mysql.createConnection({ host: 'localhost', user: 'root', password: 'PasswordForRoot74463', database: db1, }); connection_to_mysql.connect((err) => { if (err) { console.error('Error connecting to MySQL:', err.message); return; } console.log('Successfully connected to MySQL Server!'); connection_to_mysql.end((endErr) => { if (endErr) { console.error('Error closing the connection_to_mysql:', endErr.message); } else { console.log('Connection closed.'); } }); });

Разверните базу данных в облаке
Timeweb Cloud

Cloud DB 1/1/8

447 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
Диск NVMe
8 ГБ
Приватный IP
Есть
Резервные копии
Есть
Cloud DB 1/2/20

711 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
Диск NVMe
20 ГБ
Приватный IP
Есть
Резервные копии
Есть
Таблица тарифов
Сравнение тарифов
Cloud DB 1/1/8
496
Cloud DB 1/2/20
790
Cloud DB 2/2/30
1160
Cloud DB 2/4/40
1580
Cloud DB 4/8/80
3160
Cloud DB 4/12/120
4240
Cloud DB 6/12/180
5460
Cloud DB 8/16/220
7040
Процессор1 x 3.3 ГГц1 x 3.3 ГГц2 x 3.3 ГГц2 x 3.3 ГГц4 x 3.3 ГГц4 x 3.3 ГГц6 x 3.3 ГГц8 x 3.3 ГГц
Память1 ГБ2 ГБ2 ГБ4 ГБ8 ГБ12 ГБ12 ГБ16 ГБ
Диск NVMe8 ГБ20 ГБ30 ГБ40 ГБ80 ГБ120 ГБ180 ГБ220 ГБ
Приватный IPЕстьЕстьЕстьЕстьЕстьЕстьЕстьЕсть
Резервные копииЕстьЕстьЕстьЕстьЕстьЕстьЕстьЕсть

Заключение

В сегодняшней статье мы подробно ознакомились с подключением к базам данных PostgreSQL, Redis, MongoDB, MySQL и ClickHouse в различных языках программирования — Python, Go и JavaScript, с помощью которых можно создавать как веб-приложения, так и микросервисы, использующие базы данных в своей работе.  

1190
27 минут чтения
Средний рейтинг статьи: 3
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Пока нет комментариев