Сегодня базы данных используются практически в любых проектах. Взаимодействие с базами данных особенно хорошо знакомо системным администраторам, администраторам баз данных, 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 и PostgreSQL. Python широко используется для проектирования веб-приложений, микросервисов, а также для работы с большими данными и аналитикой.
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 относится к классу 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)
Еще одной популярной 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
Для работы с 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) Запускаем скрипт:
Как можно увидеть данные были успешно созданы.
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 является одним из самых молодых языков — он был разработан в 2009 году компанией Google. Go широко используется при разработке микросервисной архитектуры, а также для написания сетевых утилит. В частности, на Go написаны такие сервисы, как Docker и Kubernetes.
Go поддерживает интеграцию со всеми популярными СУБД, включая PostgreSQL, Redis, MongoDB, MySQL, ClickHouse и многие другие.
Для того чтобы подключиться к 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 необходимо воспользоваться драйвером 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 используется соответствующий драйвер.
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!")
}
Если при запуске соединение было успешно установлено, то в терминале будут выведены 2 сообщения:
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
» с уникальным идентификатором документа:
Для работы с СУБД 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)
}
Для работы с колоночной СУБД 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 активно используется для создания динамических веб-сайтов. Стоит отметить что все подключения к сторонним сервисам включая СУБД осуществляются при помощи платформы Node.js. Убедитесь что на вашем устройстве установлен Node.js и пакетный менеджер npm.
Подключение к СУБД 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 используется библиотека 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.
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();
Для работы с 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.');
}
});
});
Для работы с 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, с помощью которых можно создавать как веб-приложения, так и микросервисы, использующие базы данных в своей работе.