第15章 从Java到Python:用更Pythonic的方式玩转MongoDB

2,712 阅读3分钟

在前一篇文章Java操作Mongodb实现数据持久化中,我们介绍了如何用Java连接和操作MongoDB数据库,展示了其在企业应用中的强大功能。现在,让我们转向Python——这门以简洁语法和广泛支持著称的语言,看看它如何以更直观、简便的方式处理MongoDB数据库,特别适合快速开发和数据分析场景。本文将通过一个实际案例,带你一步步用Python搞定数据库操作。

任务描述

假设我们需要为一个小型电子商务网站开发一个简单的库存管理系统。该系统需要记录产品的基本信息,如产品ID、名称、价格、库存数量等,并能支持基本的CRUD(创建、读取、更新、删除)操作。本案例将演示如何使用Python和MongoDB来实现这个需求。

任务准备

环境配置

  • 安装Python(推荐版本3.6以上)
  • 安装MongoDB服务端并启动服务
  • 使用pip安装PyMongo库 (在终端执行命令:pip install pymongo)

数据库设计

  • 创建一个名为hniu的数据库
  • 在该数据库中创建一个名为products的集合(表)
  • 设计集合的模式:包含_id, name, price, stock_quantity字段

代码编辑器/IDE

  • 准备一个支持Python开发的编辑器或IDE(本例采用VSCode)

image.png

任务实施

from pymongo import MongoClient

# 连接到MongoDB服务器
client = MongoClient('localhost', 27017, username='hniu', password='Hniu123!@')
db = client['hniu']  # 创建hniu数据库并连接到hniu数据库
collection = db['products']  # 创建products集合

class InventoryManager:
    def create_product(self, name, price, stock_quantity):
        """创建新产品"""
        product = {
            'name': name,
            'price': price,
            'stock_quantity': stock_quantity
        }
        collection.insert_many([product])
        print(f'产品 {name} 已创建。')

    def read_product(self, product_id):
        """读取产品信息"""
        product = collection.find_one({'_id': product_id})
        if product:
            print(product)
        else:
            print('未找到该产品。')

    def update_product(self, product_id, updated_info):
        """更新产品信息"""
        result = collection.update_one({'_id': product_id}, {'$set': updated_info})
        if result.modified_count > 0:
            print(f'产品 {product_id} 已更新。')
        else:
            print('未找到该产品或无更新。')

    def delete_product(self, product_id):
        """删除产品"""
        result = collection.delete_one({'_id': product_id})
        if result.deleted_count > 0:
            print(f'产品 {product_id} 已删除。')
        else:
            print('未找到该产品。')

# 使用示例
if __name__ == "__main__":
    manager = InventoryManager()

    # 创建产品
    manager.create_product('华为手机', 5688.0, 100)
    manager.create_product('格力空调', 4800.0, 200)

    # 读取产品 (这里需要手动输入_id,例如从MongoDB手动获取的_id)
    from bson.objectid import ObjectId
    product_id = ObjectId('6716ecb688bd8e23858e92e5')  # 替换为实际的产品ID
    manager.read_product(product_id)

    # 更新产品
    manager.update_product(product_id, {'price': 5688.0, 'stock_quantity': 90})

    # 删除产品
    manager.delete_product(product_id)

# 关闭数据库连接
client.close()

代码说明

  1. 连接数据库: 添加连接到MongoDB的代码,连接hniu数据库和products集合。

  2. InventoryManager: 包含四个方法,分别用于创建、读取、更新和删除产品。

  3. CRUD操作具体实现:

    • create_product: 创建新产品并插入到集合中。
    • read_product: 读取指定产品ID的产品信息。
    • update_product: 更新指定产品ID的产品信息。
    • delete_product: 删除指定产品ID的产品。
  4. 使用示例: 创建一些产品,读取、更新和删除其中的一个产品。注意在读取和更新产品时需要提供产品的ID(可以在MongoDB中创建产品后获取)。

实训实训

基于上面案例,你可以尝试以下扩展练习来加深理解:

  • 1.查询产品价格小于5000元的产品

  • 2.查询产品价格在4000-8000元的所有产品

  • 3.查询产品名称有“华为”字样的所有产品

  • 4.查询产品价格小于5000或大于6000的产品

  • 5.为每件产品的库存数加50件

    通过这些步骤,你不仅可以熟悉Python操作MongoDB的基本流程,还能掌握如何使用Python的简洁语法来处理数据库任务,体验Pythonic的魅力。