Сегодня базы данных используются практически в любых проектах. Взаимодействие с базами данных особенно хорошо знакомо системным администраторам, администраторам баз данных, 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
-
По умолчанию на арендуемых облачных серверах уже предустановлен Python версии 3.10. Язык Go (Golang) необходимо установить отдельно.
-
Дополнительно для языка Python необходимо установить пакетный менеджер pip, чтобы скачивать сторонние пакеты.
-
Для языка JavaScript необходимо установить платформу Node.js и пакетный менеджер npm.
Развертывание облачной базы данных
Чтобы быстро развернуть необходимую СУБД можно воспользоваться сервисом облачного провайдера Timeweb Cloud под названием «Облачные базы данных» в котором достаточно выбрать необходимую СУБД, характеристики сервера и заполнить информацию о базе – название БД и пароль пользователя. Рассмотрим использование сервиса на примере создания базы PostgreSQL.
-
Проходим аутентификацию в личном кабинете по ссылке.
-
На панели слева выбираем раздел «Базы данных»:

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

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

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

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

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

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

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

dbaas
-
После того как база данных будет создана, переходим в раздел «Подключение» где будет сгенерирована строка для подключения к базе данных. Строка подключения имеет следующий вид:
psql "postgresql://<имя_пользователя>:<пароль_пользователя>@адрес_базы_данных/<имя+базы данных>

Эти данные потребуются для подключения к соответствующим инстансам баз данных. Все остальные СУБД создаются по аналогии с примером для создания PostgreSQL.
Подключение к базам данных в Python
MySQL
Для работы с MySQL существует официальный драйвер MySQL Connector.
1) Для начала установим драйвер при помощи менеджера пакетов pip:
pip install mysql-connector-python

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) Запускаем скрипт:

Как можно увидеть данные были успешно созданы.
PostgreSQL
Для Python разработано несколько плагинов, которые позволяют подключить PostgreSQL, однако самым популярным является psycopg2, который мы и будем использовать.
Psycopg2 — это один из самых часто используемых плагинов для подключения СУБД PostgreSQL. Одним из преимуществ Psycopg2 является поддержка многопоточности — при инициализации соединения к базе данных оно будет поддерживается несколькими потоками.
1) Установка плагина происходит при помощи пакетного менеджера pip (должен быть установлен заранее):
pip install psycopg2-binary

2) Произведем подключение к PostgreSQL. Для этого импортируем пакет psycopg2, далее создадим функцию create_new_conn, в которой используем метод try. Подключение осуществляется при помощи функции psycopg2.connect, которая во входных данных принимает имя базы данных, имя пользователя, пароль пользователя и адрес базы данных. Для инициализации соединения к PostgreSQL используется функция create_new_conn(). Полный исходный код для подключения к базе данных представлен ниже:
import psycopg2
from psycopg2 import OperationalError
def create_new_conn():
conn_to_postgres = None
while not conn_to_postgres:
try:
conn_to_postgres = psycopg2.connect(
default_db="default_db",
default_user="gen_user",
password_for_default_user="PasswordForDefautUser9893#",
db_address="147.45.249.142"
)
print("The connection to PostgreSQL has been successfully established!")
except OperationalError as e:
print(e)
return conn_to_postgres
conn_to_postgres = create_new_conn()
Запускаем скрипт:
python3 connect_to_postgres.py
Если соединение будет установлено успешно, появится сообщение:
The connection to PostgreSQL has been successfully established!
Следующим шагом создадим новую таблицу с именем books в которой будет три столбца. Для использования SQL выражений применяют класс cursor например, на создание объектов. Если в запросе были добавлены или изменены данные, то после запроса необходимо указать функцию conn_to_postgres.commit(), которая применяет внесенные изменения. Код для создания таблицы представле далее:
import psycopg2
from psycopg2 import OperationalError
def create_new_conn():
conn_to_postgres = None
while not conn_to_postgres:
try:
conn_to_postgres = psycopg2.connect(
default_db="default_db",
default_user="gen_user",
password_for_default_user="PasswordForDefautUser9893#",
db_address="147.45.249.142"
)
except OperationalError as e:
print(e)
return conn_to_postgres
conn_to_postgres = create_new_conn()
cursor = conn_to_postgres.cursor()
cursor.execute("""
CREATE TABLE books
(
book_id INT PRIMARY KEY NOT NULL,
book_name VARCHAR(255) NOT NULL,
book_author VARCHAR(255) NOT NULL
)
""")
conn_to_postgres.commit()
print("Table Created successfully")
Запускаем:
python3 create_table.py

Таблица была успешно создана. Далее выполним SQL-команду INSERT INTO для добавления новой строки:
cursor.execute("""
INSERT INTO books (book_id,book_name,book_author) VALUES
(1, 'Long Walk to Freedom', 'Nelson_Mandela')
""")
Полный код:
import psycopg2
from psycopg2 import OperationalError
def create_new_conn():
conn_to_postgres = None
while not conn_to_postgres:
try:
conn_to_postgres = psycopg2.connect(
default_db="default_db",
default_user="gen_user",
password_for_default_user="PasswordForDefautUser9893#",
db_address="147.45.249.142"
)
except OperationalError as e:
print(e)
return conn_to_postgres
conn_to_postgres = create_new_conn()
cursor = conn_to_postgres.cursor()
cursor.execute("""
INSERT INTO books (book_id,book_name,book_author) VALUES
(1, 'Long Walk to Freedom', 'Nelson_Mandela')
""")
conn_to_postgres.commit()
conn_to_postgres.close()
print("Data inserted successfully")
Выполним скрипт:
python3 insert-data.py

Redis
Redis относится к классу NoSQL СУБД, где данные хранятся в оперативной памяти, а не на жестких дисках. Для хранения данных в Redis используется формат ключ - значение. У Redis довольно широкий спектр применения, начиная от хранения данных заканчивая хранением кэша и использования в качестве брокера сообщений.
В языке программирования Python используется библиотека redis-py (или просто redis).
1) Для начала установим библиотеку redis:
pip install redis
2) Для того чтобы подключиться к инстансу Redis, воспользуемся структурой с использованием блока try, указав в нем функцию для подключения к Redis — redis.StrictRedis, где указывается адрес redis, порт и пароль пользователя:
import redis
try:
connect_to_redis_server = redis.StrictRedis(
redis_db_host=147.45.249.143,
redis_db_port=6379,
redis_user_password='PasswordForRedis6379')
print connect_to_redis_server
connect_to_redis_server.ping()
print 'Successfully connected to Redis Server!'
except Exception as ex:
print 'Error:', ex
exit('Failed to connect to Redis server.')
Запустим скрипт:
python3 connect_to_redis.py
Если при запуске скрипта было выведено «Successfully connected to Redis Server!». значит, подключение к Redis было выполнено успешно.
Вместо хранения данных в таблицах Redis использует формат ключ — значение. Под ключом понимается способ, предназначенный для уникальной идентификации значения.
1) Сначала создадим новую запись в Redis используя класс set. В примере ниже создадим запись с ключом City и значением Berlin:
print ('Create new record:', connect_to_redis_server.set("City", "Berlin"))
2) Далее выведем значение ключа City, используя класс get:
print ('Print record using record key', connect_to_redis_server.get("City"))
3) Если запись необходимо удалить, то используется класс delete:
('Delete record with key :', connect_to_redis_server.delete("City")
Полный фрагмент кода представлен ниже:
import redis
try:
connect_to_redis_server = redis.StrictRedis(
redis_db_host=147.45.249.143,
redis_db_port=6379,
redis_user_password='PasswordForRedis6379')
print ('New record created:', connect_to_redis_server.set("City", "Berlin"))
print ('Print created record using record key', connect_to_redis_server.get("City"))
print ('Delete created record with key :', connect_to_redis_server.delete("City"))
except Exception as ex:
print ('Error:', ex)
MongoDB
Еще одной популярной NoSQL СУБД является MongoDB которая относится к классу документоориентированных СУБД. Данные организованы в виде документов в формате JSON.
Для работы с языком программирования Python можно воспользоваться PyMongo — синхронным API-плагином.
1) Установка плагина осуществляется при помощи команды:
pip3 install mongo

2) Импортируем модуль pymongo. Класс MongoClient используется для указания адреса СУБД. Подключимся к серверу mongodb, используя блок try.
import pymongo
connect_to_mongo = pymongo.MongoClient("mongodb://147.45.249.145:27017/")
first_db = connect_to_mongo["mongo-db1"]
try:
first_db.command("serverStatus")
except Exception as e:
print(e)
else:
print("Successfully connected to MongoDB Server!")
connect_to_mongo.close()
Запускаем:
python3 connect_mongodb.py

Если соединение было успешно установлено, скрипт вернет сообщение «Successfully connected to MongoDB Server!».
3) Для добавления данных в MongoDB необходимо создать словарь. Создадим словарь с именем record1, в котором будут присутствовать три ключа:
record1 = {
"name": "Alex",
"age": 25,
"location": "Moscow"
}
4) Чтобы добавить данные словаря, в mongo используется метод insert_one:
insertrecord = collection1.insert_one(record1)
По итогу код будет следующий:
import pymongo
connect_to_mongo = pymongo.MongoClient("mongodb://147.45.249.145:27017/")
db1 = connect_to_mongo["newdb"]
collection1 = db1["userdata"]
record1 = {
"name": "Alex",
"age": 25,
"location": "Moscow"
}
insertrecord = collection1.insert_one(record1)
print(insertrecord)
Запустим скрипт:
python3 connect_mongodb.py

ClickHouse
ClickHouse представляет собой столбцовую или колоночную NoSQL базу данных в которой данные хранятся в столбцах а не в строках как это реализовано в традиционных реляционных базах данных. Широко используется для работы с аналитическими запросами.
1) Для Python разработан специальный плагин для работы с ClickHouse — clickhouse-driver. Установим драйвер при помощи менеджера пакетов pip:
pip install clickhouse-driver
2) Чтобы инициализировать новое соединение с ClickHouse необходимо импортировать класс Client из библиотеки clickhouse_drive.
Для использования SQL запросов применяется функция client.execute. Дополнительно необходимо задать движок. Более подробно с поддерживаемыми движками в ClickHouse можно ознакомиться по ссылке. Воспользуемся движком по умолчанию — MergeTree. Создадим новую таблицу users в которую добавим два столбца с данными. Для перечисления данных которые будут добавлены в таблицу используется тип данных «кортеж». После того как необходимые запросы будут выполнены, необходимо закрыть соединение с СУБД при помощи класса client.disconnect(). Итоговый код будет следующим:
from clickhouse_driver import Client
client = Client(host=194.87.190.138',
user='root',
password='P@$$w0rd123',
port=9000)
client.execute('''
CREATE TABLE IF NOT EXISTS Users (
id UInt32,
name String,
) ENGINE = MergeTree()
ORDER BY id
''')
data = [
(1, 'Alex'),
(2, 'Tim')
]
client.execute('INSERT INTO Users (id, name) VALUES', data)
result = client.execute('SELECT * FROM Users')
for row in result:
print(row)
client.disconnect()
Подключение к базам данных в Go
Язык программирования Go является одним из самых молодых языков — он был разработан в 2009 году компанией Google. Go широко используется при разработке микросервисной архитектуры, а также для написания сетевых утилит. В частности, на Go написаны такие сервисы, как Docker и Kubernetes.
Go поддерживает интеграцию со всеми популярными СУБД, включая PostgreSQL, Redis, MongoDB, MySQL, ClickHouse и многие другие.
MySQL
Для работы с СУБД 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)
}
PostgreSQL
Для того чтобы подключиться к PostgreSQL, был разработан драйвер pq. Перед тем как установить драйвер, подготовим нашу среду.
1) Создаем новый каталог, в котором будут храниться файлы проекта, и переходим в него:
mkdir postgres-connect && cd postgres-connect
2) Так как мы будем работать с зависимостями, нам необходимо создать файл go.mod, в котором они хранятся:
go mod init golang-connect-postgres

3) Скачиваем драйвер pq при помощи команды go get:
go get github.com/lib/pq

4) Создаем новый файл с именем main.go Помимо импортирования библиотеки pq, также необходимо добавить библиотеку для работы с базами данных (database/sql) т.к. по-умолчанию Go не поставляется с официальными драйверами для баз данных. Библиотека database/sql состоит из общих, независимых интерфейсов для работы с базами данных. Также стоит обратить внимание на символ нижнего подчеркивания (пустого идентификатора) при импорте модуля pq:
_ "github.com/lib/pq"
Пустой идентификатор используется во избежание ошибки «unused import» (неиспользуемый импорт), поскольку в данном случае нам потребуется только регистрация драйвера в database/sql.
Пакет fmt необходим для вывода данных в стандартный поток вывода, например, в консоль. Чтобы открыть соединение с базой данных, необходимо использовать функцию sql.Open, в которую передается строка с подключением (connStr) и имя драйвера — postgres. В строке подключения задается имя пользователя, имя базы данных, пароль и адрес хоста:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq"
)
func main() {
connStr := "user=golang dbname=db_for_golang password=Golanguserfordb0206$ host=47.45.249.146 sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Successfully connected to PostgreSQL!")
}
Скомпилируем и запустим программу:
go run main.go

Если соединение было установлено успешно, то в терминале отобразится сообщение Successfully connected to PostgreSQL!.
1) Теперь рассмотрим пример, как можно вставить данные в таблицу. Но сначала создадим таблицу в базе данных. Для этого воспользуемся строкой подключения к базе данных PostgreSQL которая отображается в разделе «Подключения» в веб-интерфейсе Timeweb Cloud. Убедитесь заранее что на вашем устройстве установлена клиентская утилита postgresql-client. Входим в оболочку psql и подключаемся к ранее созданной базе данных:
\c db_for_golang

2) Создаем таблицу с именем Cities, в которой будет три поля — city_id, city_name и city_population:
CREATE TABLE Cities (
city_id INT PRIMARY KEY,
city_name VARCHAR(45) NOT NULL,
city_population INT NOT NULL);

3) Выдаем полные права на созданную таблицу для пользователя:
GRANT ALL PRIVILEGES ON TABLE cities TO golang;

4) Функция db.Prepare используется для подготовки данных В ней заранее указывается необходимый запрос на вставку. Для вставки данных используется функция stmt.Exec, где перечислены необходимые данные. В языке Go принято использовать чистый SQL без использования подхода ORM (Object-Relational Mapping — объектно-реляционное отображение):
stmt, err := db.Prepare("INSERT INTO Cities(city_id, city_name, city_population) VALUES($1, $2, $3)")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
_, err = stmt.Exec(1, "Toronto", 279435)
if err != nil {
log.Fatal(err)
}
fmt.Println("Data inserted successfully!")
}
При успешной вставке данных в консоль будет выведено сообщение Data inserted successfully!:

Redis
Для подключения Redis необходимо воспользоваться драйвером go-redis.
1) По аналогии с подключением к PostgreSQL создаем новую директорию:
mkdir connect-to-redis && cd connect-to-redis
2) Подготавливаем файл с зависимостями:
go mod init golang-connect-redis

И оптимизируем их:
go mod tidy

3) Скачиваем модуль go-redis:
go get github.com/go-redis/redis/v8

4) Для подключения к Redis используется функция redis.Options, в которой задаются адрес и порт Redis-сервера. Так как по умолчанию в Redis не используется аутентификация, то поле Password можно оставить пустым, в качестве используемой базы данных можно выбрать стандартную базу, используемую по умолчанию (база 0):
package main
import (
"context"
"fmt"
"log"
"github.com/go-redis/redis/v8"
)
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "147.45.249.147:6379",
Password: "",
DB: 0,
})
ctx := context.Background()
_, err := rdb.Ping(ctx).Result()
if err != nil {
log.Fatalf("Couldn't connect to Redis: %v", err)
}
fmt.Println("Successfully connected to Redis!")
}
При успешном подключении будет выведено сообщение «Successfully connected to Redis!»:

MongoDB
Для работы с MongoDB используется соответствующий драйвер.
1) Создаем новую директорию, в которой будет храниться структура проекта:
mkdir connect-to-mongodb && cd connect-to-mongodb
2) Инициализируем файл с зависимостями:
go mod init golang-connect-mongodb

3) Скачиваем библиотеку mongo:
go get go.mongodb.org/mongo-driver/mongo

4) Подключение к MongoDB осуществляется при помощи метода options.Client().ApplyURI, который принимает строку подключения вида mongodb://147.45.249.148:27017, где 147.45.249.148 — адрес сервера MongoDB, а 27017 — порт для подключения к MongoDB. Строка options.Client().ApplyURI используется только для указания данных для подключения. Чтобы проверить статус соединения можно воспользоваться другой функцией — client.Ping, которая отображает успешный или неуспешный статус подключения:
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
clientOptions := options.Client().ApplyURI("mongodb://147.45.249.147:27017")
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatalf("Couldn't connect to MongoDB server: %v", err)
}
fmt.Println("successfully connected to MongoDB!")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
err = client.Ping(ctx, nil)
if err != nil {
log.Fatalf("Could not ping MongoDB server: %v", err)
}
fmt.Println("Ping MongoDB server successfully!")
}
Если при запуске соединение было успешно установлено, то в терминале будут выведены сообщения:
successfully connected to MongoDB!
Ping MongoDB server successfully

В своей работе MongoDB использует коллекции для хранения данных. Для создания коллекций используется функция .Collection. Далее мы создадим базу данных first-database и коллекцию first-collection. В коллекции будет создан новый документ, в котором будут находиться три ключа — user-name, user-age и user-email:
collection := client.Database("first-database").Collection("first-collection")
document := map[string]interface{}{
"user-name": "Alex",
"user-age": 25,
"user-email": "alex@corporate.com",
}
insertResult, err := collection.InsertOne(ctx, document)
if err != nil {
log.Fatalf("Couldn't insert new document: %v", err)
}
fmt.Printf("Inserted new document with ID: %v\n", insertResult.InsertedID)
if err := client.Disconnect(ctx); err != nil {
log.Fatalf("Could not disconnect from MongoDB: %v", err)
}
fmt.Println("Disconnected from MongoDB!")
}
При успешном выполнении запроса в терминале отобразится сообщение Inserted new document with ID с уникальным идентификатором документа:

ClickHouse
Для работы с колоночной СУБД ClickHouse используется драйвер clickhouse-go.
1) Создаем новый каталог, в котором будут храниться файлы проекта, и переходим в него:
clickhouse-connect && cd clickhouse-connect
2) Создаем файл go.mod, в котором будут храниться зависимости:
go mod init golang-connect-clickhouse
3) Скачиваем драйвер Clickhouse при помощи команды go get:
go get github.com/ClickHouse/clickhouse-go/v2
4) Создаем новый файл с именем main.go в котором указываем данные для подключения к ClickHouse:
package main
import (
"database/sql"
"log"
"github.com/ClickHouse/clickhouse-go/v2"
)
func main() {
dsn := "tcp://localhost:9000?username=user1&password=PasswordForuser175465&database=new_db"
db, err := sql.Open("clickhouse", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
if err := db.Ping(); err != nil {
log.Fatal(err)
}
log.Println("Connected to ClickHouse!")
}
Подключение к базам данных в JavaScript
Язык JavaScript активно используется для создания динамических веб-сайтов. Стоит отметить что все подключения к сторонним сервисам включая СУБД осуществляются при помощи платформы Node.js. Убедитесь что на вашем устройстве установлен Node.js и пакетный менеджер npm.
MySQL
Для работы с 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.');
}
});
});
PostgreSQL
Подключение к СУБД PostgreSQL осуществляется при помощи библиотеки pg.
1) Создаем директорию в которой будем хранить файлы проекта:
mkdir js-postgres-connect && cd js-postgres-connect
2) Инициализируем проект:
npm init -y

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

4) Для подключения к PostgreSQL сначала импортируем библиотеку pg далее создаем константу в которой укажем переменные для адреса БД, имя пользователя, пароль пользователя, имя БД и порт БД. Подключение осуществляется при помощи класса new pg.Client в котором передаются данные для подключения.
Также создадим таблицу cities в которую будут добавлены 2 записи. Для этого используется функция queryDatabase в которой указываются SQL запросы:
const pg = require('pg');
const config = {
postgresql_server_host: '193.160.208.190',
postgresql_user: 'gen_user',
postgresql_user_password: 'PasswordForGenUser56467$',
postgresql_database_name: 'default_db',
postgresql_database_port: 5432,
};
const client = new pg.Client(config);
client.connect(err => {
if (err) throw err;
else {
queryDatabase();
}
});
function queryDatabase() {
const query = `
DROP TABLE IF EXISTS cities;
CREATE TABLE cities (id serial PRIMARY KEY, name VARCHAR(80), population INTEGER);
INSERT INTO cities (name, population) VALUES ('Berlin', 3645000);
INSERT INTO cities (name, population) VALUES ('Paris', 2161000);
`;
client
.query(query)
.then(() => {
console.log('Table created successfully!');
client.end(console.log('Closed client connection'));
})
.catch(err => console.log(err))
.then(() => {
console.log('Finished execution, exiting now');
process.exit();
});
}
5) Для запуска файла используем команду:
node connect-to-postgres.js

Как можно увидеть на скриншоте выше, подключение к PostgreSQL прошло успешно. Также была создана таблица и две записи.
Redis
Для работы с Redis используется библиотека ioredis.
1) Создаем директорию в которой будем хранить файлы проекта:
mkdir js-redis-connect && cd js-redis-connect
2) Инициализируем проект:
npm init -y
3) Устанавливаем библиотеку ioredis:
npm install ioredis

4) Для подключения Redis импортируем библиотеку ioredis.
Далее создаем константу с именем redis и укажем адрес сервера Redis.
Вставка данных, то есть создания объектов типа «ключ - значение» осуществляется при помощи асинхронной функции с именем setData которая принимает на себя два значения — key и value что соответствует формату данных системы Redis.
const Redis = require('ioredis');
const redis = new Redis({
host: '147.45.153.210',
port: 6379,
password: 'UY+p8e?Kxmqqfa',
});
async function setData(key, value) {
try {
await redis.set(key, value);
console.log('Data successfully set');
} catch (error) {
console.error('Error setting data:', error);
}
}
async function getData(key) {
try {
const value = await redis.get(key);
console.log('Data retrieved');
return value;
} catch (error) {
console.error('Error getting data:', error);
}
}
(async () => {
await redis.select(1);
await setData('user', 'alex');
await getData('user');
redis.disconnect();
})();
5) Запускаем:
node connect-to-redis.js

Соединение с сервером Redis а также создания ключа с значением произошло успешно.
MongoDB
Для работы с MongoDB используется драйвер mongodb.
1) Создаем директорию в которой будем хранить файлы проекта:
mkdir js-mongodb-connect && cd js-mongodb-connect
2) Инициализируем проект:
npm init -y
3) Устанавливаем библиотеку mongodb:
npm install mongodb

4) Для подключения MongoDB импортируем библиотеку mongodb. Адрес СУБД указывается в константе uri далее адрес передается в классе MongoClient:
const { MongoClient } = require('mongodb');
const uri = "mongodb://194.87.190.137:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
async function connectToDatabase() {
try {
await client.connect();
console.log("Successfully connected to MongoDB!");
const database = client.db("myDatabase");
const collection = database.collection("myCollection");
const documents = await collection.find({}).toArray();
console.log("Documents found:", documents);
} catch (error) {
console.error("Error connecting to MongoDB:", error);
} finally {
await client.close();
console.log("Connection closed.");
}
}
connectToDatabase();
ClickHouse
Для работы с ClickHouse используется драйвер clickhouse/client.
1) Создаем директорию в которой будем хранить файлы проекта:
mkdir js-clickhouse-connect && cd js-clickhouse-connect
2) Инициализируем проект:
npm init -y
3) Устанавливаем библиотеку @clickhouse/client:
npm install @clickhouse/client
4) Для подключения к ClickHouse используем код ниже в котором зададим данные для подключения и выполним простой SQL запрос которые вернет первые 10 записей из системной таблицы с именем system.tables:
const { ClickHouse } = require('@clickhouse/client');
const client = new ClickHouse({
host: 'http://localhost:8123',
username: 'default',
password: 'PasswordforDefaultUser45435',
database: 'default',
});
async function connectAndQuery() {
try {
console.log('Successfully connected to ClickHouse Server!');
const rows = await client.query({
query: 'SELECT * FROM system.tables LIMIT 10',
format: 'JSON',
}).then((result) => result.json());
console.log('Query results:', rows);
} catch (error) {
console.error('Error Successfully connected to ClickHouse Server! or running the query:', error);
} finally {
console.log('Done.');
}
}
connectAndQuery();
Разверните базу данных в облаке<br>Timeweb Cloud
Заключение
В сегодняшней статье мы подробно ознакомились с подключением к базам данных PostgreSQL, Redis, MongoDB, MySQL и ClickHouse в различных языках программирования — Python, Go и JavaScript, с помощью которых можно создавать как веб-приложения, так и микросервисы, использующие базы данных в своей работе.
