12/08/2018, 13:08

Non-Relational SQL ( MongoDB ) với Python và Django

I. MongoDB MongoDB là một cơ sở dữ liệu tài liệu mã nguồn mở, và cơ sở dữ liệu hàng đầu NoSQL. MongoDB được viết bằng c ++. 1.Giới thiệu về MongoDB MongoDB là một tài liệu định hướng cơ sở dữ liệu đa nền tảng. Phân loại như là một cơ sở dữ liệu NoSQL, MongoDB cũng tránh các cấu trúc cơ sở ...

I. MongoDB

MongoDB là một cơ sở dữ liệu tài liệu mã nguồn mở, và cơ sở dữ liệu hàng đầu NoSQL. MongoDB được viết bằng c ++.

1.Giới thiệu về MongoDB

MongoDB là một tài liệu định hướng cơ sở dữ liệu đa nền tảng. Phân loại như là một cơ sở dữ liệu NoSQL, MongoDB cũng tránh các cấu trúc cơ sở dữ liệu quan hệ dựa trên bảng truyền thống ủng hộ tài liệu JSON giống như với các lược đồ năng động (MongoDB gọi các định dạng BSON), làm cho việc tích hợp các dữ liệu trong một số loại ứng dụng dễ dàng hơn và nhanh hơn. Được phát hành dưới sự kết hợp của Giấy phép Công cộng GNU Affero General và Giấy phép Apache, MongoDB là phần mềm miễn phí và mã nguồn mở.

2.Cấu trúc của cơ sở dữ liệu

Nếu như bạn biết sử dụng JSON thì trong MongoDB cũng có cấu trúc lưu trữ tương tự, chính vì thế nó có hiệu suất cao, tương tác nhanh và khả năng mở rộng tốt, nó hoạt động trên khái niệm collection và document. Tới đây thì có lẽ bạn sẽ thắc mắc collection là gì? và document là gì? phải không nào? Nếu vậy thì ta sẽ tìm hiểu các phần tiếp theo nhé.

  • Database là gì?

Database là một Ô chứa dữ liệu ở mức vật lý (physical), mỗi database sẽ có nhiều collection và được thiết lập lưu trữ ở một nơi trong máy chủ máy tính. Một máy chủ MongoDB thường có thể tạo nhiều cơ sở dữ liệu.

  • Collection là gì?

Collection trong MongoDB là nhóm các tài liệu (document), nó tương đương với một bảng (table) trong CSDL thông thường nên mỗi collection sẽ thuộc về một database duy nhất. Tuy nhiên nó có một sực khác biệt đó là nó không có ràng buộc Relationship như các hệ quản trị CSDL khác nên việc truy xuất rất nhanh, chính vì thế mỗi collection có thể chứa nhiều thể loại khác nhau không giống như table trong hệ quản trị mysql là các field cố định.

  • Document là gì?

Document trong MongoDB có cấu trúc tương tự như kiểu dữ liệu JSON, nghĩa là sẽ có các cặp (key => giá trị) nên nó có tính năng động rất lớn. Document ta có thể hiểu nó giống như các record dữ liệu trong MYSQL, tuy nhiên nó có sự khác biệt là các cặp (key => value) có thể không giống nhau ở mỗi document.

II. Mongodb với Python

1. Pymongo

Mongodb cung cấp 1 thư viện để làm việc với ngôn ngữ lập trình Python là pymongo. a. Install PyMongo

** - Linux/OS X**

Bạn có thể cài đặt bằng pip :

pip install pymongo

- Windows

Use MS Windows installers from https://pypi.python.org/pypi/pymongo/.

2.Import pymongo

Sau khi cài đặt thành công. Bạn cần import MongoClient và Project để thao tác với MongoDB

from pymongo import MongoClient

3. Create a Connection

Sử dụng MongoClient để tạo kết nối

client = MongoClient()

Nếu bạn ko truyền đối số nào vào MongoClient() thì mặc định MongoClient() sẽ chạy trên localhost sử dụng cổng mặc định 27017

Ngoài ra bạn cũng có thể truyền các đối số để thiết lập các kết nối khác nhau

client = MongoClient("mongodb://mongodb0.example.net:27019"

4. Access Database Objects

Kết nối tới database ' primer '

 db = client.primer

Hoặc

 db = client['primer']

5. Access Collection Objects

Kết nối tới collection

 coll = db.dataset

hoặc

coll = db['dataset']

**III. MongoDB với Django Framework **

PyMongo là cầu nối giữa Python và MongoDB. Nhưng để sử dụng các mô hình truy vấn ORM của Django thì PyMongo không hỗ trợ.

Do đó ta cần sử dụng thêm 1 framework nữa là cầu nối giữa PyMongo và Django nhằm sử dụng được mô hình truy vấn ORM là Mongoengine

1. Install Mongoengine

Bạn có thể cài đặt thông qua Pip

 pip install mongoengine

" vi mongoengine chỉ là cầu nối nên để sử dụng trước hết bạn cần cài đặt PyMongo "

2. Cầu hình trong setting.py

Mở file setting.py chỉnh sửa vào phần

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.dummy',
    }
}
# MongoDB settings
MONGODB_DATABASES = {
    'default': {'name': 'name database'}
}
DJANGO_MONGOENGINE_OVERRIDE_ADMIN = True

SESSION_ENGINE = 'django_mongoengine.sessions'

3. Định nghĩa các model

 class User(Document):
    email = StringField(required=True)
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)

Ở đây mỗi 1 class được định nghĩa tương đương với 1 collection và mỗi 1 phần tử dữ liệu được thêm vào tương đương với 1 documents

Mongoengine cung cấp 1 class Document ( model ) chứa các đĩnh nghĩa thuộc tính của 1 class.

" Bạn có thể tìm hiểu thêm về Doccument tại đây http://docs.mongoengine.org/en/latest/guide/defining-documents.html "

4. Thao tác với model

  • Thêm dữ liệu
 ross = User(email='ross@example.com', first_name='Ross', last_name='Lawley').save()

Hoặc

ross = User(email='ross@example.com')
ross.first_name = 'Ross'
ross.last_name = 'Lawley'
ross.save()
  • Cập nhật ( update data )
 ross = User.objects.get(email='ross@example.com')
 ross.first_name = 'ross'
ross.save()
  • Xóa dữ liệu
 ross = User.objects.get(email='ross@example.com').delete()
  • Tìm kiếm dữ liệu
ross = User.objects.filter(email='ross@example.com')

Phần sau tôi sẽ giới thiệu kỹ hơn về cách sắp xếp dữ liệu, truy vấn dữ liệu giữa MngoengineDjango

0