Có ba cách khác nhau để kết nối Django với MongoDB Show
Sử dụng pymongoPymongo là một phân phối Python có chứa các công cụ để làm việc với MongoDB. Pymongo rất tốt để viết và lưu dữ liệu JSON vào MongoDB của bạn, Pymongo sẽ cho phép bạn sử dụng tất cả các truy vấn Mongo trong mã Python của bạn. is a Python distribution containing tools for working with MongoDB. PyMongo is great for writing and saving JSON data to your MongoDB, PyMongo will let you use all of the mongo queries in your python code. Cài đặt pymongo bằng cách sử dụng lệnh pip install pymongo Tạo tệp Utils.py trong thư mục dự án của bạn và mã sau from pymongo import MongoClient Các phương pháp trên có thể được sử dụng trong các chế độ xem để vận hành MongoDB của bạn. Sử dụng MongoengineMongoengine là một lớp ORM trên đỉnh của pymongo. Vì vậy, bạn vẫn cần pymongo (> = 3,4) trên hệ thống của bạn để sử dụng Mongoengine. Sử dụng Mongoengine để kết nối Django và MongoDB cung cấp cho bạn các trường như Listfield và Dictfield để xử lý dữ liệu JSON không có cấu trúc khổng lồ. Đầu tiên, cài đặt Mongoengine bằng cách sử dụng: pip install mongoengine Thêm mã sau trong Cài đặt.Py của thư mục dự án của bạn và xóa hoặc nhận xét phần cơ sở dữ liệu import mongoengine Thêm model.py from mongoengine import Document, fieldsclass Blogs(Document): Lưu ý: def get_collection_handle(db_handle, collection_name): def get_collection_handle(db_handle, collection_name): from pymongo import MongoClient 4and from pymongo import MongoClient 5 is not needed since you are not using Django ORM here.Sử dụng DjongoDjongo là một cải tiến đối với Pymongo ở chỗ các nhà phát triển không cần phải viết các truy vấn dài. Nó ánh xạ các đối tượng Python thành các tài liệu MongoDB, tức là, ánh xạ tài liệu đối tượng (ODM). Để cài đặt Djongo pip install djongo Bây giờ trong cài đặt.py của thư mục dự án của bạn chỉnh sửa cài đặt cơ sở dữ liệu DATABASES = { 'default': { 'ENGINE': 'djongo', 'NAME': 'your-db-name', 'ENFORCE_SCHEMA': False, 'CLIENT': { 'host': 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority' } }} Bây giờ chạy python manage.py makemigrations <app-name>python manage.py migrate Bước tiếp theoBây giờ chúng ta đã biết các cách khác nhau để kết nối Django và MongoDB, chúng ta phải chọn đúng cho dự án của mình. Các cách tiếp cận có ưu và nhược điểm riêng của họ. Ví dụ: nếu bạn đang bắt đầu từ đầu, Mongoengine là một cách tốt để đi, vì nó có thể dễ dàng đối phó với nhiều dữ liệu không có cấu trúc. Nếu bạn có nhiều truy vấn phức tạp để viết trong ứng dụng của mình, bạn nên đi với pymongo. Djongo phù hợp hơn nếu bạn có một dự án Django cần di chuyển sang MongoDB từ cơ sở dữ liệu khác, vì điều đó sẽ yêu cầu số lượng thay đổi mã ít nhất. Để sử dụng MongoDB làm cơ sở dữ liệu phụ trợ của bạn trong dự án Django của bạn, chỉ cần thêm một dòng này vào tệp cài đặt của bạn.this one line into your settings.py file: DATABASES = { Nó đơn giản mà! Tiếp theo, đăng nhập vào nhà quản trị của bạn (localhost: 8000/admin/) và bắt đầu thêm các tài liệu nhúng của Google vào MongoDB bằng GUI quản trị viên: Vào tháng 10 năm 2017 MongoDB đã hoàn thành bước cuối cùng trong công khai, định giá IPO của mình ở mức 24 đô la và tăng 192 triệu đô la trong quá trình này. Tài chính của công ty đang tăng trưởng đều đặn: MongoDB cung cấp phần mềm cơ sở dữ liệu có nguồn mở. Điều này rất hữu ích cho các công ty khởi nghiệp giai đoạn đầu đang tìm cách ra mắt trong khi bị hạn chế bởi ngân sách eo hẹp. Một đánh giá về xu hướng tìm kiếm của Google cho MongoDB cho thấy sự gia tăng ổn định về sự quan tâm. Xu hướng của Google - Thuật ngữ tìm kiếm: MongoDBMongoDB ngày càng trở thành một phần mềm cơ sở dữ liệu phổ biến để làm việc. Cơ sở dữ liệu và hệ thống quản lý cơ sở dữ liệu (DBM) đã tồn tại trong hơn năm thập kỷ. Chúng nổi lên vào đầu những năm 1960, và hương vị phổ biến nhất là hệ thống cơ sở dữ liệu quan hệ. Nhưng MongoDB đi xung quanh tự gọi mình là một hệ thống cơ sở dữ liệu phi quan hệ của người Hồi giáo và đã đưa ra những tuyên bố cao về cách tiếp cận của nó để lưu trữ dữ liệu. Vì vậy, chính xác thì vấn đề lớn ở đây là gì? MongoDB vs SQLKhá nhiều tất cả các hệ thống cơ sở dữ liệu quan hệ đều sử dụng ngôn ngữ truy vấn có cấu trúc (SQL) (hoặc phiên bản điều chỉnh của nó) để liên lạc với phần mềm quản lý dữ liệu. Một số khóa học đại học chỉ dành riêng cho sự hiểu biết và làm chủ cú pháp SQL. SQL đã trở thành ngôn ngữ phi thực tế để làm việc với bất kỳ phần mềm cơ sở dữ liệu (DB) nào, nguồn mở hoặc nguồn mở. Sau đó, MongoDB đã xuất hiện và quyết định thể hiện sự coi thường ngôn ngữ quyền lực cổ xưa này và giới thiệu cú pháp truy vấn của chính nó.
MongoDB Schemaless vs SQL lược đồ: Trong cơ sở dữ liệu SQL, nó không thể thêm dữ liệu cho đến khi bạn xác định các bảng và loại trường trong những gì mà Lọ gọi là lược đồ. Trong cơ sở dữ liệu MongoDB, dữ liệu có thể được thêm vào bất cứ nơi nào, bất cứ lúc nào. Không cần phải chỉ định thiết kế tài liệu hoặc thậm chí là một bộ sưu tập phía trước.In an SQL database, it’s impossible to add data until you define tables and field types in what’s referred to as a schema. In a MongoDB database, data can be added anywhere, at any time. There’s no need to specify a document design or even a collection up-front. Tài liệu MongoDB so với Bảng SQL: Cơ sở dữ liệu SQL cung cấp một kho các bảng dữ liệu liên quan. Mỗi hàng là một bản ghi khác nhau. Thiết kế cứng nhắc: Bạn không thể sử dụng cùng một bảng để lưu trữ thông tin khác nhau hoặc chèn một chuỗi nơi dự kiến một số.SQL databases provide a store of related data tables. Every row is a different record. The design is rigid: you cannot use the same table to store different information or insert a string where a number is expected. Cơ sở dữ liệu MongoDB lưu trữ các tài liệu cặp giá trị trường giống như JSON. Các tài liệu tương tự có thể được lưu trữ trong một bộ sưu tập, tương tự như bảng SQL. Tuy nhiên, bạn có thể lưu trữ bất kỳ dữ liệu nào bạn thích trong bất kỳ tài liệu nào - MongoDB đã giành được khiếu nại. Các bảng SQL tạo ra một mẫu dữ liệu nghiêm ngặt, do đó, rất khó để phạm sai lầm. MongoDB linh hoạt và tha thứ hơn, nhưng có thể lưu trữ bất kỳ dữ liệu nào ở bất cứ đâu có thể dẫn đến các vấn đề nhất quán. Có rất nhiều nội dung trực tuyến có sẵn lập luận rằng MongoDB không phải là siêu SQL. Các ứng dụng chạy trên SQL không thể được chuyển sang MongoDB. Tôi đang đi ra ngoài ở đây để tuyên bố rằng, trong bối cảnh Django, MongoDB là một siêu sao của SQL.MongoDB is a superset of SQL. Vậy tại sao niềm tin phổ biến, MongoDB không phải là một siêu SQL, tồn tại để bắt đầu? MongoDB yêu cầu phân xử dữ liệu: trong MongoDB không có hỗ trợ tham gia. Điều này có nghĩa là chúng tôi sẽ phải từ chối các tài liệu của chúng tôi. Các tài liệu bị phân loại hóa dẫn đến các truy vấn nhanh hơn, nhưng việc cập nhật thông tin trường tài liệu trong nhiều tài liệu bị phân loại sẽ chậm hơn đáng kể. In MongoDb there is no JOIN support. This means we will have to denormalize our documents. Denormalized documents leads to faster queries, but updating the document field information in multiple denormalized documents will be significantly slower. Không có sự tham gia: Truy vấn SQL cung cấp một điều khoản tham gia mạnh mẽ. Chúng ta có thể có được dữ liệu liên quan trong nhiều bảng bằng cách sử dụng một câu lệnh SQL. Trong các cơ sở dữ liệu phi quan hệ như MongoDB, không có sự tham gia nào như sẽ có trong cơ sở dữ liệu quan hệ. Điều này có nghĩa là bạn cần thực hiện nhiều truy vấn và tham gia dữ liệu theo cách thủ công trong mã của bạn.: SQL queries offer a powerful JOIN clause. We can obtain related data in multiple tables using a single SQL statement. In non-relational databases like MongoDB, there are no JOINs like there would be in relational databases. This means you need to perform multiple queries and join the data manually within your code. Không có giao dịch: Trong cơ sở dữ liệu SQL, hai hoặc nhiều cập nhật có thể được thực hiện trong một giao dịch-một trình bao bọc tất cả hoặc không có gì đảm bảo thành công hoặc thất bại. Nếu chúng tôi thực hiện hai bản cập nhật riêng lẻ, người ta có thể thành công và thất bại khác - do đó khiến các số liệu của chúng tôi không đồng bộ. Đặt cùng một bản cập nhật trong một giao dịch đảm bảo cả hai thành công hoặc cả hai đều thất bại. In SQL databases, two or more updates can be executed in a transaction — an all-or-nothing wrapper that guarantees success or failure. If we execute two updates individually, one could succeed and the other fail — thus leaving our figures out of sync. Placing the same updates within a transaction ensures either both succeed or both fail. Không có ràng buộc khóa nước ngoài: Hầu hết các cơ sở dữ liệu SQL cho phép bạn thực thi các quy tắc toàn vẹn dữ liệu bằng cách sử dụng các ràng buộc khóa nước ngoài. Điều này đảm bảo tất cả các hàng có khóa nước ngoài hợp lệ cho mã khớp với một mục nhập trong bảng tham gia và đảm bảo rằng bản ghi từ bảng tham gia không bị xóa nếu một hoặc nhiều hàng vẫn đề cập đến chúng. Most SQL databases allow you to enforce data integrity rules using foreign key constraints. This ensure all rows have a valid foreign key for code that matches one entry in the join table, and makes sure that a record from the join table is not removed if one or more rows still refer to them. Lược đồ thực thi các quy tắc này để cơ sở dữ liệu tuân theo. Nó không thể cho các nhà phát triển hoặc người dùng thêm, chỉnh sửa hoặc xóa hồ sơ, có thể dẫn đến dữ liệu không hợp lệ hoặc hồ sơ mồ côi. Các tùy chọn tính toàn vẹn dữ liệu tương tự không có sẵn trong MongoDB. Bạn có thể lưu trữ những gì bạn muốn bất kể bất kỳ tài liệu nào khác. Lý tưởng nhất, một tài liệu duy nhất sẽ là nguồn duy nhất của tất cả các thông tin về một mục. Nhu cầu về mô hình cơ sở dữ liệuCác đối tượng là sự trừu tượng của Python cho dữ liệu. Tất cả dữ liệu trong chương trình Python được biểu thị bằng các đối tượng hoặc bằng mối quan hệ giữa các đối tượng. Mặc dù các đối tượng là một cách tốt để thể hiện dữ liệu, một vấn đề phát sinh khi chúng ta muốn làm cho dữ liệu tồn tại. Lượng dữ liệu có thể rất lớn và nó phải được lấy từ bộ nhớ liên tục một cách nhanh chóng và hiệu quả. Phần mềm cơ sở dữ liệu này phải được sử dụng để lưu trữ các đối tượng. Một phần mềm cơ sở dữ liệu có thể là một phần mềm cơ sở dữ liệu dựa trên SQL quan hệ.make the data persistent. The amount of data could be huge, and it must be retrieved from the persistent memory quickly and efficiently. This database software must be used to store the objects. A possible database software is a relational, SQL-based database software. Một bản đồ liên quan đến đối tượng (ORM) là một thư viện mã tự động hóa việc chuyển dữ liệu được lưu trữ trong các bảng cơ sở dữ liệu quan hệ vào các đối tượng Python được sử dụng trong mã Python. ORMS cung cấp một bản tóm tắt cấp cao trên cơ sở dữ liệu quan hệ cho phép nhà phát triển viết mã Python thay vì cú pháp SQL để tạo, đọc, cập nhật và xóa dữ liệu và lược đồ trong cơ sở dữ liệu của họ. Các nhà phát triển có thể sử dụng ngôn ngữ lập trình Python mà họ cảm thấy thoải mái thay vì viết các câu lệnh SQL hoặc các thủ tục được lưu trữ. Một ví dụ về khung ORM cho Python là SQLalchemy. SQLalchemy ORM trình bày một phương pháp liên kết các lớp Python do người dùng xác định với các bảng cơ sở dữ liệu và các trường hợp của các lớp (đối tượng) với các hàng trong các bảng tương ứng của chúng. Nó bao gồm một hệ thống đồng bộ hóa một cách minh bạch tất cả các thay đổi về trạng thái giữa các đối tượng và các hàng liên quan của chúng. Các khung web như Flask sử dụng sqlalchemy để lưu trữ dữ liệu liên tục. Django ORM: Django đi kèm với ORM hoặc mô hình của riêng mình. Mô hình là nguồn thông tin duy nhất, dứt khoát về dữ liệu của bạn. Nó chứa các trường và hành vi thiết yếu của dữ liệu bạn lưu trữ. Nói chung, mỗi mô hình ánh xạ vào một bảng cơ sở dữ liệu duy nhất. Mô hình Django cũng có thể chuyển đổi giữa các cơ sở dữ liệu quan hệ khác nhau như Oracle SQL, MySQL hoặc MSSQL. Django comes with its own ORM or model for short.The model is the single, definitive source of information about your data. It contains the essential fields and behaviors of the data you’re storing. Generally, each model maps to a single database table. The Django Model also make it possible to switch between various relational databases such as Oracle SQL, MySQL, or MSSQL. Sử dụng Django Orm để thêm tài liệu vào MongoDBHãy nói rằng bạn muốn tạo một nền tảng viết blog bằng cách sử dụng Django với MongoDB làm phụ trợ của bạn. Trong blog của bạn from pymongo import MongoClient 6 Tệp xác định mô hình from pymongo import MongoClient 7:from djongo import models Để truy cập mô hình bằng Quản trị viên Django, bạn sẽ cần một định nghĩa biểu mẫu cho mô hình trên. Xác định nó như hình dưới đây: from pymongo import MongoClient 0Bây giờ, đã nhúng vào from pymongo import MongoClient 1Đó là bạn đã thiết lập! Fire Up Django Admin trên localhost: 8000/ admin/ và đây là những gì bạn nhận được: Tiếp theo, giả sử bạn muốn mở rộng trường của tác giả để chứa nhiều thứ hơn là chỉ tên. Bạn cần cả tên và email. Đơn giản chỉ cần làm cho trường tác giả thành một trường được nhúng trên mạng thay vì một trường char char: from pymongo import MongoClient 2Nếu một bài đăng trên blog có nhiều nội dung từ nhiều tác giả, hãy xác định một mô hình mới: from pymongo import MongoClient 3Quản trị viên Django với những thay đổi mới và bạn có: Các cách để tích hợp Django và MongoDB.Django ORM bao gồm nhiều lớp trừu tượng được xếp chồng lên nhau. Ngăn xếp django ormLà một nhà phát triển web, bạn có thể tham gia thử thách kết nối Django với MongoDB theo hai cách. Hãy xem ngăn xếp khung Django ở trên để đoán các điểm nhập cảnh có thể. Sử dụng mô hình tương thích MongoDBChuyển từ các mô hình Django sang ODMBạn hoàn toàn có thể tránh sử dụng các mô hình Django Pin bao gồm các mô hình Django trong dự án của bạn. Thay vào đó, hãy sử dụng khung bên thứ ba như Mongoengine hoặc Ming trong các dự án Django của bạn. Chọn một mô hình khác có nghĩa là bạn bỏ lỡ:
Bạn đã tăng cường về chuyên môn của các mô hình Django hiện có và tăng cường trên khung mô hình mới. Nhưng có lẽ nhược điểm lớn nhất là dự án của bạn có thể sử dụng bất kỳ mô hình đóng góp nào của Django! Quên về việc sử dụng quản trị viên, phiên, người dùng, auth và các mô -đun đóng góp khác cho dự án của bạn. Một số nhược điểm này được bù đắp bằng cách đưa ra một nhánh mới của Django. Django-Nonrel là một chi nhánh độc lập của Django, bổ sung hỗ trợ cơ sở dữ liệu NoQuery cho Django. Django-Nonrel cho phép viết các ứng dụng Django di động. Tuy nhiên, giao diện quản trị không hoạt động đầy đủ. Không có sự phát triển tích cực diễn ra trong dự án Django-Nonrel. Động cơ Django MongoDB là một phụ trợ MongoDB khác cho Django là một cái nĩa ngoài ODM Mongoengine. Django SQL đến MongoDB Transpiler - DjongoDjongo - Bộ chuyển đổi SQL sang MongoDBMột cách tiếp cận khác là dịch cú pháp truy vấn Django SQL được tạo ra bởi Django Orm thành các lệnh pymongo. Djongo là một trong những trình biên dịch truy vấn SQL cho MongoDB như vậy. Nó dịch mọi chuỗi truy vấn SQL thành tài liệu truy vấn MongoDB. Do đó, tất cả các mô hình Django và các mô -đun liên quan hoạt động như hiện tại. Với cách tiếp cận này, bạn đạt được:
Làm cho Django hoạt động với MongoDBLược đồ mô phỏng trong MongoDB: Mặc dù không có hỗ trợ lược đồ trong MongoDB, điều này có thể được mô phỏng. Djongo cung cấp hỗ trợ lược đồ cần thiết trong Django bằng cách sử dụng và xác định kết hợp các quy tắc xác thực MongoDB và bằng cách tạo bộ sưu tập pip install mongoengine 1 collection. The pip install mongoengine 1 collection stores information for supporting features like the SQL AUTOINCREMENT key.Tham gia hỗ trợ trong MongoDB: Trong phiên bản 3.2, MongoDB đã giới thiệu toán tử pip install mongoengine 3 operator. It performs a left outer join to a collection in the same database to filter in documents from the “joined” collection for processing. The pip install mongoengine 3 stage does an equality match between a field from the
input documents with a field from the documents of the “joined” collection.Đối với mỗi tài liệu đầu vào, giai đoạn pip install mongoengine 3 sẽ thêm một trường mảng mới có các phần tử là các tài liệu phù hợp từ bộ sưu tập của tham gia. Giai đoạn pip install mongoengine 3 chuyển các tài liệu được định hình lại này cho giai đoạn tiếp theo.Djongo sử dụng toán tử tổng hợp pip install mongoengine 3 để thực hiện tất cả các truy vấn tham gia liên quan đến Django. Đây là cách nó làm cho quản trị viên và các mô -đun đóng góp khác hoạt động như vậy.Hỗ trợ giao dịch trong MongoDB: Mặc dù có sức mạnh của các hoạt động nguyên tử đơn lẻ, có những trường hợp yêu cầu giao dịch đa tài liệu. Khi thực hiện một giao dịch bao gồm các hoạt động tuần tự, một số vấn đề nhất định phát sinh, trong đó nếu một hoạt động không thành công, hoạt động trước đó trong giao dịch phải rollback rollback đối với trạng thái trước đó - đó là tất cả hoặc không có gì.Despite the power of single-document atomic operations, there are cases that require multi-document transactions. When executing a transaction composed of sequential operations, certain issues arise, wherein if one operation fails, the previous operation within the transaction must “rollback” to the previous state — that is, the “all or nothing.” Đối với các tình huống yêu cầu các giao dịch đa tài liệu, Djongo thực hiện mô hình cam kết hai pha để cung cấp hỗ trợ cho các loại cập nhật đa tài liệu này. Sử dụng cam kết hai pha đảm bảo rằng dữ liệu là nhất quán và trong trường hợp có lỗi, trạng thái trước giao dịch có thể phục hồi. Djongo đi kèm với tập hợp các thỏa hiệp của riêng mình. Vậy những bất lợi của việc chọn sử dụng Djongo cho dự án Django của bạn là gì? Hiệu suất: Django ORM thực hiện việc nâng cao các thao tác đối tượng phức tạp sang các chuỗi truy vấn SQL tiêu chuẩn. Nếu cơ sở dữ liệu phụ trợ của bạn dựa trên SQL, bạn có thể chuyển chuỗi truy vấn này trực tiếp đến nó mà hầu như không xử lý hậu kỳ. Tuy nhiên, với Djongo, chuỗi truy vấn bây giờ sẽ phải được chuyển đổi thành tài liệu truy vấn MongoDB. The Django ORM does the heavy lifting of converting complex object manipulations to standard SQL query strings. If your backend database was SQL-based, you could pass this query string directly to it with almost no post-processing. With Djongo, however, the query string will now have to be converted into a MongoDB query document. Điều này sẽ yêu cầu một số chu kỳ CPU. Nhưng nếu các chu kỳ CPU thêm thực sự là một vấn đề như vậy, có lẽ bạn không nên sử dụng Python ngay từ đầu. Sự kết luậnTôi đã đưa bạn qua một số cách tích hợp Django với MongoDB. Bạn sẽ tìm thấy vô số văn học trực tuyến mô tả Mongoengine và các biến thể khác để làm điều này. Tôi tập trung vào Djongo, một đầu nối mới giúp điều này có thể theo một cách khác. Nó rất dễ sử dụng và làm cho quá trình di chuyển từ phụ trợ SQL sang MongoDB rất đơn giản, bằng cách thêm một dòng mã.by adding just one line of code. |