Hướng dẫn flask connect to mongodb - bình kết nối với mongodb

Cách thiết lập bình với MongoDB

Flask là một khung Python được áp dụng rộng rãi để xây dựng các ứng dụng web. Nó cho phép các nhà phát triển Python sử dụng ngôn ngữ ưa thích của họ với tất cả các tài sản của mình trong khi xây dựng các ứng dụng web Python có thể mở rộng và nhanh để bắt đầu. MongoDB Atlas là nền tảng cơ sở dữ liệu của MongoDB, cho phép các nhà phát triển linh hoạt làm việc với dữ liệu phức tạp trong khi phát triển nhanh hơn bao giờ hết. Nền tảng MongoDB Atlas rất đơn giản để thiết lập và mở rộng, làm cho nó trở thành cơ sở dữ liệu hoàn hảo cho các ứng dụng web.

Việc tích hợp ứng dụng bình với MongoDB tạo ra một ngăn xếp ứng dụng mạnh mẽ và có thể mở rộng. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách kết nối ứng dụng bình của bạn với MongoDB Atlas.

Hỗ trợ pymongo cho bình

Pymongo là người lái xe MongoDB chính thức cho Python. Bất kỳ ứng dụng Python nào cũng có thể tiêu thụ trình điều khiển pymongo bằng cách nhập nó và sử dụng thể hiện Mongoclient. Các ứng dụng bình có thể tận dụng Pymongo để truy cập cơ sở dữ liệu Atlas MongoDB của chúng tôi.

Vì Flask là tất cả về việc cải thiện trải nghiệm của nhà phát triển khi phát triển các ứng dụng web, cộng đồng đã tạo ra một người trợ giúp được áp dụng rộng rãi có tên là Flask-Pymongo, một người bao bọc xung quanh Pymongo, được tích hợp chặt chẽ với bình. Bài viết này sẽ sử dụng khung này để làm việc với cụm cấp miễn phí có sẵn trong Atlas MongoDB, cho phép bạn thử ngăn xếp này miễn phí.

Bắt đầu với Flask-Pymongo

Ứng dụng Mflix là một ứng dụng duyệt phim ví dụ được biết đến trên Đại học MongoDB. Toàn bộ dự án mẫu được đặt trong repo GitHub-pymongo-ví dụ MongoDB của chúng tôi.

Bạn có thể sao chép dự án này và khám phá README để thiết lập ứng dụng demo của bạn hoặc theo dõi bài viết này khi chúng tôi đi qua các yếu tố cần thiết của dự án này.

Để giới thiệu một ví dụ ứng dụng bình được tích hợp với Atlas, chúng tôi sẽ sử dụng cơ sở dữ liệu sample_mflix trong bộ dữ liệu mẫu MongoDB Atlas. Mặt tiền của ứng dụng Mflix MFLIX ​​sẽ sử dụng thư viện Flask-Pymongo, khám phá các hoạt động tạo, đọc, cập nhật và xóa (CRUD) cơ bản cùng với tìm kiếm và tập hợp văn bản.sample_mflix database in the MongoDB Atlas sample dataset. The facade of “mflix” application will use Flask-PyMongo library, exploring the basic Create, Read, Update, and Delete (CRUD) operations together with text search and aggregations.

Hướng dẫn flask connect to mongodb - bình kết nối với mongodb

Dự án này sử dụng một lớp UI trong một mặt trước của ReactJS và một ứng dụng bình Python để lưu trữ phần đầu và API back-end để truy cập vào cơ sở dữ liệu phim.

Cấu trúc dự án

Thư mục

import bson

from flask import current_app, g
from werkzeug.local import LocalProxy
from flask_pymongo import PyMongo

from pymongo.errors import DuplicateKeyError, OperationFailure
from bson.objectid import ObjectId
from bson.errors import InvalidId


def get_db():
    """
    Configuration method to return db instance
    """
    db = getattr(g, "_database", None)

    if db is None:

        db = g._database = PyMongo(current_app).db
       
    return db


# Use LocalProxy to read the global db instance with just `db`
db = LocalProxy(get_db)
5 giữ logic ứng dụng. Điêu nay bao gôm:

  • ________ 16- Vị trí nơi tất cả các mẫu CRUD cơ sở dữ liệu được phơi bày dưới dạng các chức năng. Đây cũng là nơi mà người trợ giúp Flask-Pymongo được sử dụng để tương tác với Atlas MongoDB.
  • ________ 17- Vị trí nơi API Web được tiếp xúc với UI và các yêu cầu các tuyến đường đến các chức năng cơ sở dữ liệu phù hợp.

Thư mục chính chứa các tệp sau:

  • ________ 18- Vị trí nơi ứng dụng bình được khởi tạo và cấu hình được tải.
  • ________ 19- Vị trí nơi URI kết nối với MongoDB Atlas được cấu hình.
  • ________ 20- Vị trí nơi các phụ thuộc mà dự án này cần chạy được tìm thấy.

Cách lắp bình với pymongo

Dự án sử dụng tệp yêu cầu cài đặt PIP tiêu chuẩn liệt kê phiên bản mới nhất của các phụ thuộc cần thiết:

requirements.txt

Flask
pymongo[srv]
Flask-PyMongo

Những người đó sẽ cho phép chúng tôi kết nối phiên bản ứng dụng Flask với máy khách Pymongo sử dụng Trình trợ giúp Flask-Pymongo, như được đặt trong tệp DB.Py:

import bson

from flask import current_app, g
from werkzeug.local import LocalProxy
from flask_pymongo import PyMongo

from pymongo.errors import DuplicateKeyError, OperationFailure
from bson.objectid import ObjectId
from bson.errors import InvalidId


def get_db():
    """
    Configuration method to return db instance
    """
    db = getattr(g, "_database", None)

    if db is None:

        db = g._database = PyMongo(current_app).db
       
    return db


# Use LocalProxy to read the global db instance with just `db`
db = LocalProxy(get_db)

Mã trên khởi tạo một đối tượng DB DB toàn cầu khi sử dụng Mongo_uri đọc từ tệp .ini:

config = configparser.ConfigParser()
config.read(os.path.abspath(os.path.join(".ini")))

if __name__ == "__main__":
    app = create_app()
    app.config['DEBUG'] = True
    app.config['MONGO_URI'] = config['PROD']['DB_URI']

    app.run()

Chúng tôi sẽ thay thế tệp mẫu mẫu_ini bằng chuỗi kết nối cụm Atlas có liên quan:

[PROD]
DB_URI = mongodb+srv://:@/sample_mflix

Nhận chuỗi kết nối của bạn

Để tạo máy khách, bạn sẽ cần truyền chuỗi kết nối để truy cập cơ sở dữ liệu của bạn.

Chuỗi kết nối có thể được tìm thấy trong Atlas UI. Các bước sau đây sẽ chỉ cho bạn cách lấy chuỗi kết nối của bạn:

  1. Truy cập UI Atlas và đảm bảo bạn đã đăng nhập vào tài khoản của mình.
  2. Đảm bảo bạn đang ở trên trang cụm. Nó phải là trang mặc định nhưng nếu không, chọn nó từ menu bên trái trên trang.

    Hướng dẫn flask connect to mongodb - bình kết nối với mongodb

  1. Nhấp vào nút Kết nối trực tuyến cho cụm bạn đã tạo trước đó.

    Hướng dẫn flask connect to mongodb - bình kết nối với mongodb

  1. Chọn “Kết nối ứng dụng của bạn.

    Hướng dẫn flask connect to mongodb - bình kết nối với mongodb

  1. Sao chép chuỗi kết nối được cung cấp vào mã tạo, thay thế bất kỳ giá trị nào bên trong, chẳng hạn như, với các chi tiết của bạn.

    Hướng dẫn flask connect to mongodb - bình kết nối với mongodb

Bắt đầu ứng dụng

Làm việc với các môi trường ảo trong Python là một thực tiễn tốt, vì vậy đối với ứng dụng ví dụ của chúng tôi, hãy để tạo ra một cái tên

config = configparser.ConfigParser()
config.read(os.path.abspath(os.path.join(".ini")))

if __name__ == "__main__":
    app = create_app()
    app.config['DEBUG'] = True
    app.config['MONGO_URI'] = config['PROD']['DB_URI']

    app.run()
1:

# clone the github repo
git clone :mongodb-developer/flask-pymongo-example.git

# navigate to the project directory
cd flask-pymongo-example

# create the virtual environment for MFlix
python3 -m venv mflix_venv

# activate the virtual environment
source mflix_venv/bin/activate

Cài đặt phụ thuộc:

python3 -m pip install -r requirements.txt

Chỉnh sửa Sample_ini để có chuỗi kết nối Atlas của bạn:

[PROD]
DB_URI = mongodb+srv://:@sandbox.abcd.mongodb.net/sample_mflix

Đổi tên Sample_ini thành tệp .ini:

mv sample_ini .ini

Bắt đầu ứng dụng:

python ./run.py

Điều này sẽ xuất các thông báo bảng điều khiển về khởi động máy chủ và trạng thái của nó. Ứng dụng của bạn phải có sẵn thông qua trình duyệt trên http: // localhost: 5000.

Cách lưu trữ dữ liệu bằng pymongo và bình

Tất cả các truy cập cơ sở dữ liệu được định tuyến thông qua đối tượng DB DB toàn cầu sẽ khởi tạo máy khách pymongo. Đối tượng biến đặc biệt, G G G được sử dụng ở đây để xác định cơ sở dữ liệu pymongo trong bối cảnh ứng dụng toàn cầu.

db = g._database = PyMongo(current_app).db

Trong MongoDB, thông tin được lưu trữ trong các tài liệu BSON. BSON là một cấu trúc nhị phân, giống như JSON. Nó hỗ trợ các loại dữ liệu giống như JSON với một vài tính năng bổ sung như ngày, nhị phân thô, cũng như nhiều loại số như số nguyên, dài và float.

Một bộ sưu tập là những gì MongoDB gọi là một nhóm tài liệu trong một container. Hãy cùng bao gồm các hoạt động tạo, đọc, cập nhật và xóa cơ bản.

Tạo ra

Việc tạo tài liệu có thể được thực hiện thông qua đối tượng thu thập và phương thức chèn_one. Hãy xem xét chức năng của add add_comment:

import bson

from flask import current_app, g
from werkzeug.local import LocalProxy
from flask_pymongo import PyMongo

from pymongo.errors import DuplicateKeyError, OperationFailure
from bson.objectid import ObjectId
from bson.errors import InvalidId


def get_db():
    """
    Configuration method to return db instance
    """
    db = getattr(g, "_database", None)

    if db is None:

        db = g._database = PyMongo(current_app).db
       
    return db


# Use LocalProxy to read the global db instance with just `db`
db = LocalProxy(get_db)
0

Hàm trên nhận các thuộc tính nhận xét và chèn một tài liệu vào bộ sưu tập bình luận.

Đọc

Đọc trong MongoDB có thể được thực hiện thông qua truy vấn bằng Find hoặc Find_OneWhich trả về một con trỏ tài liệu hoặc một tài liệu duy nhất tương ứng. Một tùy chọn khác là sử dụng các tập hợp để thực hiện tìm kiếm hoặc tái cấu trúc dữ liệu phức tạp hơn. Để biết thêm thông tin về tập hợp, xem tài liệu này.

Truy vấn ứng dụng của chúng tôi có thể lọc phim bằng cả phương thức tìm và tổng hợp:

Tìm trong

config = configparser.ConfigParser()
config.read(os.path.abspath(os.path.join(".ini")))

if __name__ == "__main__":
    app = create_app()
    app.config['DEBUG'] = True
    app.config['MONGO_URI'] = config['PROD']['DB_URI']

    app.run()
2

import bson

from flask import current_app, g
from werkzeug.local import LocalProxy
from flask_pymongo import PyMongo

from pymongo.errors import DuplicateKeyError, OperationFailure
from bson.objectid import ObjectId
from bson.errors import InvalidId


def get_db():
    """
    Configuration method to return db instance
    """
    db = getattr(g, "_database", None)

    if db is None:

        db = g._database = PyMongo(current_app).db
       
    return db


# Use LocalProxy to read the global db instance with just `db`
db = LocalProxy(get_db)
1

Phương thức Find đang tìm kiếm bộ sưu tập phim và cung cấp một tiêu chí truy vấn và sắp xếp tài liệu dựa trên đầu vào của người dùng. Xem mã này trong tệp db.py.

Tổng hợp trong

config = configparser.ConfigParser()
config.read(os.path.abspath(os.path.join(".ini")))

if __name__ == "__main__":
    app = create_app()
    app.config['DEBUG'] = True
    app.config['MONGO_URI'] = config['PROD']['DB_URI']

    app.run()
3

import bson

from flask import current_app, g
from werkzeug.local import LocalProxy
from flask_pymongo import PyMongo

from pymongo.errors import DuplicateKeyError, OperationFailure
from bson.objectid import ObjectId
from bson.errors import InvalidId


def get_db():
    """
    Configuration method to return db instance
    """
    db = getattr(g, "_database", None)

    if db is None:

        db = g._database = PyMongo(current_app).db
       
    return db


# Use LocalProxy to read the global db instance with just `db`
db = LocalProxy(get_db)
2

Tổng hợp thư giãn mảng thể loại trong mỗi tài liệu và tính toán một danh sách riêng biệt các thể loại có thể.

Cập nhật

Để cập nhật tài liệu, một đối tượng thu thập có thể sử dụng phương thức update_one. Trong ví dụ của chúng tôi, chúng tôi cung cấp một bộ lọc và các giá trị được cập nhật cho văn bản và ngày nhận xét:

import bson

from flask import current_app, g
from werkzeug.local import LocalProxy
from flask_pymongo import PyMongo

from pymongo.errors import DuplicateKeyError, OperationFailure
from bson.objectid import ObjectId
from bson.errors import InvalidId


def get_db():
    """
    Configuration method to return db instance
    """
    db = getattr(g, "_database", None)

    if db is None:

        db = g._database = PyMongo(current_app).db
       
    return db


# Use LocalProxy to read the global db instance with just `db`
db = LocalProxy(get_db)
3

Xóa bỏ

Để xóa một tài liệu, một đối tượng thu thập có thể sử dụng phương thức Delete_one. Trong ví dụ của chúng tôi, chúng tôi cung cấp một bình luận để xóa nó:

import bson

from flask import current_app, g
from werkzeug.local import LocalProxy
from flask_pymongo import PyMongo

from pymongo.errors import DuplicateKeyError, OperationFailure
from bson.objectid import ObjectId
from bson.errors import InvalidId


def get_db():
    """
    Configuration method to return db instance
    """
    db = getattr(g, "_database", None)

    if db is None:

        db = g._database = PyMongo(current_app).db
       
    return db


# Use LocalProxy to read the global db instance with just `db`
db = LocalProxy(get_db)
4

Cái gì tiếp theo?

Flask, Pymongo và MongoDB Atlas cung cấp một ngăn xếp tuyệt vời để xây dựng các ứng dụng Python web của bạn và dễ dàng mở rộng và lưu trữ chúng. Sử dụng hướng dẫn này, bạn có thể bắt đầu xây dựng ứng dụng của riêng mình ngay hôm nay với MongoDB Atlas.

Câu hỏi thường gặp

Tôi có thể sử dụng MongoDB với bình không?

Bình được sử dụng để làm gì trong Python?

Làm thế nào để bạn sử dụng MongoDB với bình python?

Làm thế nào để bạn cài đặt Flask-Pymongo?

Làm thế nào để bạn sử dụng pymongo trong Python?