📜  制作Python API 以访问 Mongo Atlas 数据库

📅  最后修改于: 2022-05-13 01:55:38.798000             🧑  作者: Mango

制作Python API 以访问 Mongo Atlas 数据库

先决条件: Python |使用 Flask 构建 REST API

RESTful API 是管理应用程序后端的非常有用的工具。它可用于定义架构以及使用 API 管理的路由管理应用程序的依赖关系。 Flask 是一个流行的用于构建 Web 应用程序的微框架。

在本文中,我们将学习如何制作一个 Flask RESTful API,通过 MongoDB 连接到 MongoDB Atlas 数据库服务。在此之前,您必须使用您的电子邮件地址在 MongoDB Atlas 上创建一个用户帐户。

完成初始设置后。请按照以下步骤操作:

  • 步骤 1:通过单击“新建项目”按钮创建新项目。为您的项目命名并添加成员(如果有)以了解您希望如何授予对项目的访问权限。通过单击“创建项目”按钮创建一个项目。您的仪表板应如下所示。

  • 第 2 步:单击“构建集群” 。从弹出窗口中选择“共享集群” 。选择所需的设置。例如:AWS 云提供商和孟买地区。您将在云上获得 512MB 空间来托管您的数据库。创建集群。您的仪表板将如下所示。

  • 第 3 步:现在,单击“连接” 。它将打开一个对话框。按照显示的说明进行操作。将您的 IP 地址添加到白名单。这是可以访问数据库的 IP 地址列表。接下来,创建用于访问数据库的用户名和密码。现在,单击“选择连接方法”
  • 第 4 步:现在,在出现的新对话框中单击“连接您的应用程序” 。在驱动程序下拉列表中选择“Python” ,在版本下拉列表中选择“3.6 或更高版本” 。复制下一行中的链接。它看起来像:
mongodb+srv://admin:@cluster0-pm5vp.mongodb.net/test?retryWrites=true&w=majority
  • 第 5 步:您的用户名出现在链接中(此处为管理员)。 替换为此用户的密码。

这是将Python API 连接到数据库的链接或 URL。现在,通过单击仪表板上的“集合”选项卡创建一个示例数据库,并通过单击“添加我自己的数据”创建一个新数据库。给你一个数据库名和一个表名,然后完成创建一个新数据库。

对于此示例,我创建了一个名为“Example”的数据库和一个名为“SampleTable”的表。

下面的Python代码使用pymongo链接到您的 MongoDB Atlas 数据库。

注意:请安装以下库来运行烧瓶 API: flask、pymongo、dnspython、flask_cors

from flask import Flask
from flask_cors import CORS
import pymongo
  
# Replace your URL here. Don't forget to replace the password.
connection_url = 'mongodb+srv://admin:@cluster0-pm5vp.mongodb.net/test?retryWrites=true&w=majority'
app = Flask(__name__)
client = pymongo.MongoClient(connection_url)
  
# Database
Database = client.get_database('Example')
# Table
SampleTable = Database.SampleTable
  
if __name__ == '__main__':
    app.run(debug=True)

这将在您的 http://localhost/5000 上启动一个烧瓶服务器,该服务器将连接到您的 MongoDB Atlas 数据库。成功执行后,控制台将如下所示:

现在您可以在 API 中创建路由并定义与数据库交互的函数。下面给出了一个关于如何映射路线并使用它们来接收值并与数据库交互的示例。

  • route(path, methods):用于定义调用相应函数的路径。 '' 用于从路径中提取值。
    比如下面的insert函数,路径中包含,表示路径中'insert-one/'后面的值会存入name,后面的值会存入ID。方法用于定义函数将接受的方法类型。你可以从这里阅读。
  • jsonify(object):用于从传递的对象创建一个 JSON 对象。
  • insert_one(object):用于将传递的对象插入到调用它的集合中。
  • find_one(object):用于在数据库中查找与作为参数中的键传递的对象匹配的对象。它将整个文档作为对象返回。此方法返回与传递的键值匹配的第一个对象。
  • find(object):用于查找与传递的键值匹配的所有对象。
  • update_one(object):用于更新数据库中与某些传递的键值匹配的某个对象的值。
from flask import Flask, jsonify, request
from flask_cors import CORS
import pymongo
  
connection_url = 'mongodb+srv://admin:samplearticle@cluster0-pm5vp.mongodb.net/test?retryWrites=true&w=majority'
app = Flask(__name__)
client = pymongo.MongoClient(connection_url)
  
# Database
Database = client.get_database('Example')
# Table
SampleTable = Database.SampleTable
  
# To insert a single document into the database,
# insert_one() function is used
@app.route('/insert-one///', methods=['GET'])
def insertOne(name, id):
    queryObject = {
        'Name': name,
        'ID': id
    }
    query = SampleTable.insert_one(queryObject)
    return "Query inserted...!!!"
  
# To find the first document that matches a defined query,
# find_one function is used and the query to match is passed
# as an argument.
@app.route('/find-one///', methods=['GET'])
def findOne(argument, value):
    queryObject = {argument: value}
    query = SampleTable.find_one(queryObject)
    query.pop('_id')
    return jsonify(query)
  
# To find all the entries/documents in a table/collection,
# find() function is used. If you want to find all the documents
# that matches a certain query, you can pass a queryObject as an
# argument.
@app.route('/find/', methods=['GET'])
def findAll():
    query = SampleTable.find()
    output = {}
    i = 0
    for x in query:
        output[i] = x
        output[i].pop('_id')
        i += 1
    return jsonify(output)
  
  
# To update a document in a collection, update_one()
# function is used. The queryObject to find the document is passed as
# the first argument, the corresponding updateObject is passed as the
# second argument under the '$set' index.
@app.route('/update/////', methods=['GET'])
def update(key, value, element, updateValue):
    queryObject = {key: value}
    updateObject = {element: updateValue}
    query = SampleTable.update_one(queryObject, {'$set': updateObject})
    if query.acknowledged:
        return "Update Successful"
    else:
        return "Update Unsuccessful"
  
  
if __name__ == '__main__':
    app.run(debug=True)

输出:上面的代码对不同的 URL 请求有不同的响应。

  • 插入一个请求:http://127.0.0.1:5000/insert-one/ chitrank/1/
    这会将以下对象插入到集合 SampleTable 中并返回 'Query Inserted...!!!'插入文档后。
    {
    style=”color:rgb(80,80,80);background-color:rgb(255,255,255);”> '名称' : 'chitrank' ,
    'ID' : '1',
    }

  • 查找一个请求:http://127.0.0.1:5000/find-one/ Name/chitrank/
    此请求将返回一个与 URL 中传递的值匹配的对象。返回的对象将显示在浏览器窗口中。

  • 查找请求: http://127.0.0.1:5000/find/
    此请求将返回调用表中的所有对象。返回的对象将显示在浏览器窗口中。

  • 更新一请求: http://127.0.0.1:5000/update/ID/1/Name/GeeksForGeeks/
    此请求将使用最后两个值更新与前两个参数匹配的对象。成功更新后将返回“更新成功”

这些是我在这里提到的一些基本操作。这些对于管理数据库来说绰绰有余。 MongoDB 提供了广泛的操作,您可以从 MongoDB 官方文档中阅读