Урок 84. MongoDB и Python. Модули
⚡ Кратко: примеры кода
- Подключись через
MongoClient, проверь соединение командойping. - Выбери базу и коллекцию через квадратные скобки.
- Добавляй документы методами
insert_oneиinsert_many. - Читай данные через
find_oneиfind, настраивай сортировку, лимит и проекцию. - Обновляй через
$setи$inc, удаляй черезdelete_one/delete_many. - Оборачивай работу с базой в
try ... except pymongo.errors. - Разделяй код на модули и используй
if __name__ == "__main__".
💻 Рабочие примеры
Все примеры предполагают, что у вас есть доступ к серверу MongoDB. Замените строку подключения на свою.
Пример 1. Подключение и проверка
Файл: 01_connect.py
from pymongo import MongoClient
client = MongoClient(
"mongodb://ich_editor:verystrongpassword"
"@mongo.itcareerhub.de/?readPreference=primary"
"&ssl=false&authMechanism=DEFAULT&authSource=ich_edit"
)
try:
client.admin.command("ping")
print("Connection successful!")
finally:
client.close()
Пример 2. Выбор базы и коллекции
Файл: 02_select_db.py
from pymongo import MongoClient
client = MongoClient("mongodb://...")
db = client["ich_edit"]
products = db["products"]
print("Database:", db.name)
print("Collection:", products.name)
client.close()
Пример 3. Добавление документов
Файл: 03_insert.py
from pymongo import MongoClient
client = MongoClient("mongodb://...")
products = client["ich_edit"]["products"]
# Один документ
product = {"name": "Notebook", "price": 5.99, "stock": 120}
result = products.insert_one(product)
print("Inserted ID:", result.inserted_id)
# Несколько документов
items = [
{"name": "Pen", "price": 1.50, "stock": 300},
{"name": "Pencil", "price": 0.99, "stock": 500},
{"name": "Eraser", "price": 0.75, "stock": 200},
]
result = products.insert_many(items)
print("Inserted IDs:", result.inserted_ids)
client.close()
Пример 4. Чтение документов
Файл: 04_find.py
from pymongo import MongoClient
client = MongoClient("mongodb://...")
products = client["ich_edit"]["products"]
# Один документ
first = products.find_one()
print("First:", first)
# Все документы дешевле 5
print("Cheap products:")
for doc in products.find({"price": {"$lt": 5}}):
print(doc)
# Сортировка, пропуск, лимит
print("Top 2 by price:")
for doc in products.find().sort("price", -1).limit(2):
print(doc)
client.close()
Пример 5. Проекция полей
Файл: 05_projection.py
from pymongo import MongoClient
client = MongoClient("mongodb://...")
products = client["ich_edit"]["products"]
# Только name и price
for doc in products.find({}, {"name": 1, "price": 1}):
print(doc)
# Без _id
for doc in products.find({}, {"_id": 0}):
print(doc)
client.close()
Пример 6. Обновление документов
Файл: 06_update.py
from pymongo import MongoClient
client = MongoClient("mongodb://...")
products = client["ich_edit"]["products"]
# Изменить цену одного товара
result = products.update_one(
{"name": "Notebook"},
{"$set": {"price": 24.99}}
)
print("Matched:", result.matched_count)
print("Modified:", result.modified_count)
# Увеличить цену всех товаров на 1
result = products.update_many(
{},
{"$inc": {"price": 1}}
)
print("Modified all:", result.modified_count)
client.close()
Пример 7. Удаление документов
Файл: 07_delete.py
from pymongo import MongoClient
client = MongoClient("mongodb://...")
products = client["ich_edit"]["products"]
# Удалить один документ
result = products.delete_one({"name": "Notebook"})
print("Deleted one:", result.deleted_count)
# Удалить все дешёвые товары
result = products.delete_many({"price": {"$lt": 2}})
print("Deleted many:", result.deleted_count)
client.close()
Пример 8. Обработка ошибок
Файл: 08_errors.py
from pymongo import MongoClient, errors
client = MongoClient(
"mongodb://ich_editor:wrong_pass@mongo.itcareerhub.de/?authSource=ich_edit"
)
try:
db = client["store"]
products = db["products"]
products.insert_one({"name": "Lamp", "price": 15.99})
except errors.ConnectionFailure:
print("Ошибка подключения к MongoDB")
except errors.OperationFailure:
print("Ошибка авторизации или запроса")
except errors.PyMongoError as e:
print("Общая ошибка pymongo:", e)
finally:
client.close()
Пример 9. Пользовательский модуль
Файл: math_utils.py
def average(numbers):
return sum(numbers) / len(numbers)
def maximum(numbers):
return max(numbers)
if __name__ == "__main__":
values = [10, 20, 30]
print("Average:", average(values))
print("Maximum:", maximum(values))
Файл: main.py
import math_utils
from math_utils import maximum
values = [10, 20, 30]
print(math_utils.average(values))
print(maximum(values))
Пример 10. Структура пакета
Структура папок:
modules/
├── main.py
├── math_utils.py
├── analyzer.py
└── tools/
├── __init__.py
├── text_utils.py
└── helpers/
├── __init__.py
└── string_tools.py
Файл: tools/text_utils.py
def count_words(text):
return len(text.split())
Файл: tools/helpers/string_tools.py
def reverse(text):
return text[::-1]
Файл: tools/__init__.py
from .text_utils import count_words
from .helpers.string_tools import reverse
Файл: analyzer.py
import tools
text = "What a beautiful day to learn Python!"
print(tools.count_words(text))
print(tools.reverse(text))
⚠️ Проверить по документации: в реальных проектах для управления зависимостями и виртуальными окружениями используют
venv или poetry. Для MongoDB существуют также ODM-библиотеки, такие как mongoengine и beanie.