Разверните OpenClaw в облаке в один клик
Вход/ Регистрация

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

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

Сегодня базы данных используются практически в любых проектах. Взаимодействие с базами данных особенно хорошо знакомо системным администраторам, администраторам баз данных, 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/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 ГГц2 x 3.3 ГГц2 x 3.3 ГГц4 x 3.3 ГГц4 x 3.3 ГГц6 x 3.3 ГГц8 x 3.3 ГГц
Память2 ГБ2 ГБ4 ГБ8 ГБ12 ГБ12 ГБ16 ГБ
Диск NVMe20 ГБ30 ГБ40 ГБ80 ГБ120 ГБ180 ГБ220 ГБ
Резервные копииЕстьЕстьЕстьЕстьЕстьЕстьЕсть
Приватный IPЕстьЕстьЕстьЕстьЕстьЕстьЕсть
PostgreSQL 18
Выбрать
Фиксированный
Произвольный
CPU
RAM
Диск
Стоимость
1 x 3.3 ГГц
2 ГБ
20 ГБ
790 ₽/мес
2 x 3.3 ГГц
2 ГБ
30 ГБ
1 160 ₽/мес
2 x 3.3 ГГц
4 ГБ
40 ГБ
1 580 ₽/мес
Раз в день
0 ₽/месяц
Отключить
Не рекомендуется

Заключение

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

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