Акмалов Артур

Python MongoDB Часть 1

python mongodb

python mongodb

Общий план

При изучении темы DevOps попробую сделать простую программу телеграм бота на Python с базой данных MongoDB в докер контейнерах и развернуть все это с помощью docker-compose. Без погружения в разработку простой код, для экспериментов с CI

  • Поднять базу данных MongoDB
  • Понять основной синтаксис в консоли mongo
  • Подключение и управление базой через Python
  • Бэкапы перенос базы данных
  • Телеграм бот работа с базой данных
  • Создание контейнера с приложением Python
  • Создать docker-compose с кодом программы и базой

Знакомства с NoSQL базой данных MongoDB

1. Установка и подготовка

Пробую впервые, для начало нужно понять общий синтаксис, научиться создавать базы, таблицы, добавлять, удалять и искать значения.

Для ознакомления поднимаю mongodb в docker 

docker pull mongo
docker run --name mongodb -d -p 27017:27017 mongo 

Для визуального наблюдения буду использовать GUI for MongoDB — Compass на Windows 10 ссылка на официальный сайт

Для подключения к базе использую адрес и порт в Compass mongodb://10.127.0.120:27017

Данная программа для удобства мониторинга и визуального представления. Для управления буду использовать CLI и необходимо войти внутрь контейнера

docker exec -it mongodb bash 

2. Изучение основных команд

Внутри Docker mongodb запускаю mongo для перехода в консоль управления базой

show dbs #показать базы данных 
use testdb #переключиться на базу данных "testdb" если нет создает её 
db.createCollection("users");

#Создать коллекцию (таблицу) users 

Для начало попробую создать базу данных пользователей, мне понадобится имя пользователя и его чат ID в боте

db.users.insert({name: "Artur", chatid: "5486178"});
db.users.insert({name: "Rinat", chatid: "3472583"}); 

Смотрю что получилось в Compass

Все по плану, иду дальше

db.users.find() #показать коллекцию users
db.users.find({name:"Artur"}) # поиск по name
 

Далее попробовал добавить еще раз эти же данные, база позволяет хотелось бы, чтоб не повторялись значения. Для этого делаю поле chatid уникальным

db.users.createIndex( { "chatid": 1 }, { unique: true } ) 

Теперь при добавлении с таким же chatid получаю ошибку

«errmsg» : «E11000 duplicate key error collection: testdb.users index: chatid_1 dup key: { chatid: \»5486178\» }»

db.users.createIndex( { name: 1, chatid: 1 }, { unique: true } )
# Уникальные имена и чатИД 
db.users.dropIndex( { name: 1, chatid: 1 }, { unique: true } )
# Удалить индекс уникальных имен и чатИД 

Сохранение или удаление команда save Если есть такое значение он его обноавляет (update) если нет создает (insert)

db.users.save({name: "Andrei", chatid: "123344"}); 

Поиск в базе где chatid содержит цифры «54»

db.users.find({"chatid" : {$regex : ".*54.*"}}); 
db.users.find().limit(2); #Первые 2 записи 
db.users.count(); #Количество записей 

Сведения информация статистика

# Получить статистику коллекций

db.<collectionName>.stats()
db.printCollectionStats()

# Статистика задержек для операций чтения, записи, включая среднее время, 
# затраченное на чтение, запись и связанное с ним количество выполненных операций

db.<collectionName>.latencyStats()

# Получить размер коллекции для данных и индексов

db.<collectionName>.dataSize() # Размер коллекциии
db.<collectionName>.storageSize() # Общий вес коллекции на диске
db.<collectionName>.totalSize() # Общий размер в байтах как для данных сбора, так и для индексов
db.<collectionName>.totalIndexSize() # Общий размер всех индексов в коллекции 

3. Связка с Python

Установка библиотеки pymongo

pip install pymongo 

Подключение к серверы базы MongoDB

from pymongo import MongoClient

client = MongoClient('10.127.0.120', 27017)

db = client['testdb']
users = db['users'] 

Показать все записии в коллекции

for x in users.find():
    print(x) 
for x in users.find():
    name = x['name']
    chatid = x['chatid']
    print(f'{name} - {chatid}')

#Вывод из словаря 

Поиск по имени

result = users.find_one({'name': 'Artur'})
print(result)

#Получить chatid пользователя с именем Artur
result = users.find_one({'name': 'Artur'})
print(result['chatid']) 

Добавление пользователя

user_data = {
    "name": "Aleksin",
    "chatid": "1254866",
}

result = users.insert_one(user_data)
print(f"Add ID: {result.inserted_id}") 

Редактирование изменение данных

findName = {'name': 'Artur'}
changeid = {"$set": {'chatid': '1227777'}}
users.update_one(findName, changeid) 

Самые простые и основные команды изучены, синтаксис примерно понятен. Можно приступать к созданию телеграм бота.

Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии