PyMongo — официальный драйвер MongoDB для Python. Он нужен, если вы хотите из Python-кода подключиться к MongoDB, выбрать базу и коллекцию, добавить документ, прочитать данные, обновить запись или удалить ее. Для простого проекта PyMongo достаточно: не нужно сразу ставить тяжелую ORM или прятать базовые операции за сложной архитектурой
Короткая схема такая: ставим пакет pymongo, создаем MongoClient, выбираем базу через client["shop"], выбираем коллекцию через db["products"], выполняем CRUD-операции
- Что должно быть готово до установки PyMongo
- Установка PyMongo
- Первый рабочий пример
- Как устроен код
- Подключение к MongoDB Atlas
- Типовые ошибки PyMongo
- ModuleNotFoundError: No module named pymongo
- ServerSelectionTimeoutError
- Authentication failed
- Документ вставился, но база не видна заранее
- Когда PyMongo подходит, а когда нужен другой подход
- Мини-чек-лист
- Что почитать дальше по MongoDB
Что должно быть готово до установки 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
Мини-чек-лист
- MongoDB запущена и отвечает на
ping. - PyMongo установлен в активное виртуальное окружение.
- В коде используется правильный URI.
- База и коллекция выбраны через квадратные скобки.
- Первый тест делает
insert_one()иfind_one(). - Ошибки подключения проверяются сначала через
mongosh, потом через Python.
Что почитать дальше по MongoDB
Если нужен общий маршрут по теме, откройте рубрику MongoDB. Для соседних задач пригодятся эти разборы:
- Discord bot на Python и MongoDB: как задать проверку
- MongoDB aggregate: как написать первый aggregation-запрос
- MongoDB install: как установить MongoDB и проверить первый запуск
- Как подключить Telegram-бота к MongoDB



