PyMongo: как подключить Python к MongoDB и выполнить первый CRUD

PyMongo — официальный драйвер MongoDB для Python. Он нужен, если вы хотите из Python-кода подключиться к MongoDB, выбрать базу и коллекцию, добавить документ, прочитать данные, обновить запись или удалить ее. Для простого проекта PyMongo достаточно: не нужно сразу ставить тяжелую ORM или прятать базовые операции за сложной архитектурой

Короткая схема такая: ставим пакет pymongo, создаем MongoClient, выбираем базу через client["shop"], выбираем коллекцию через db["products"], выполняем CRUD-операции

Что должно быть готово до установки PyMongo

Перед кодом проверьте две вещи

Первая — Python работает:

python --version

Или на macOS/Linux:

python3 --version

Вторая — MongoDB запущена локально или у вас есть connection string от MongoDB Atlas. Для локальной базы можно проверить:

mongosh
db.runCommand({ ping: 1 })

Если ping возвращает ok: 1, можно подключать Python

Установка PyMongo

Лучше работать в виртуальном окружении:

python -m venv .venv

Активация на Windows:

.\.venv\Scripts\Activate.ps1

Активация на macOS/Linux:

source .venv/bin/activate

Установка:

python -m pip install pymongo

Проверка:

python -m pip show pymongo

Если команда показывает версию пакета, драйвер установлен в текущее окружение

Первый рабочий пример

Создайте файл mongo_start.py

from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")

db = client["shop"]
products = db["products"]

product_id = products.insert_one({
    "title": "Курс по MongoDB",
    "price": 1900,
    "in_stock": True,
}).inserted_id

print("Добавлен документ:", product_id)

product = products.find_one({"_id": product_id})
print("Найден документ:", product)

products.update_one(
    {"_id": product_id},
    {"$set": {"price": 1500}}
)

updated_product = products.find_one({"_id": product_id})
print("После обновления:", updated_product)

products.delete_one({"_id": product_id})
print("Удалили тестовый документ")

client.close()

Запустите:

python mongo_start.py

Этот пример делает полный минимум: подключение, вставка, чтение, обновление, удаление и закрытие клиента

Как устроен код

MongoClient("mongodb://localhost:27017") создает клиент для подключения к локальной MongoDB. Это не значит, что база уже выбрана: клиент знает адрес сервера

client["shop"] выбирает базу shop. Если такой базы нет, MongoDB создаст ее при первой записи

db["products"] выбирает коллекцию products

insert_one() добавляет один документ и возвращает объект результата. Через inserted_id можно получить _id созданного документа

find_one() возвращает первый подходящий документ

update_one() обновляет один документ. Оператор $set меняет конкретное поле, не перезаписывая весь документ

delete_one() удаляет один документ по фильтру

client.close() закрывает клиент. В коротком скрипте это особенно удобно: программа явно завершает работу с подключением

Подключение к MongoDB Atlas

Если база находится не локально, а в Atlas, используйте connection string из интерфейса Atlas. В реальном проекте не храните строку подключения прямо в коде. Положите ее в переменную окружения

Пример:

import os
from pymongo import MongoClient

mongo_uri = os.environ["MONGO_URI"]
client = MongoClient(mongo_uri)

Так вы не публикуете логин и пароль в репозитории

Типовые ошибки PyMongo

ModuleNotFoundError: No module named pymongo

Пакет установлен не в то окружение или скрипт запускается другим Python

Проверьте:

python -m pip show pymongo
python -c "import sys; print(sys.executable)"

Запускайте установку и скрипт одним и тем же Python

ServerSelectionTimeoutError

PyMongo не смог выбрать доступный сервер. Причины: MongoDB не запущена, указан неверный порт, Docker-контейнер не пробросил порт, Atlas не разрешает ваш IP, строка подключения неправильная

Проверьте локальную MongoDB:

mongosh "mongodb://localhost:27017"

Если mongosh тоже не подключается, проблема не в Python, а в сервере или адресе

Authentication failed

Логин, пароль, база аутентификации или строка подключения указаны неверно. Для Atlas скопируйте URI заново, замените пароль аккуратно и проверьте, что пользователь базы существует

Документ вставился, но база не видна заранее

MongoDB не создает пустые базы и коллекции в привычном SQL-смысле. База появится после первой записи. Это нормальное поведение

Когда PyMongo подходит, а когда нужен другой подход

PyMongo отлично подходит для скриптов, парсеров, небольших backend-сервисов, учебных проектов и прямого контроля над запросами. Он не заставляет описывать модели, поэтому вы быстрее видите, как MongoDB работает на самом деле

Если проект большой и вам нужна строгая схема на уровне Python-классов, можно смотреть в сторону ODM-библиотек. Но начинать лучше с PyMongo: так проще понимать, какие запросы реально уходят в MongoDB

Мини-чек-лист

  1. MongoDB запущена и отвечает на ping.
  2. PyMongo установлен в активное виртуальное окружение.
  3. В коде используется правильный URI.
  4. База и коллекция выбраны через квадратные скобки.
  5. Первый тест делает insert_one() и find_one().
  6. Ошибки подключения проверяются сначала через mongosh, потом через Python.

Что почитать дальше по MongoDB

Если нужен общий маршрут по теме, откройте рубрику MongoDB. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x