micromongo là một lớp nhỏ xung quanh pymongo mà cho phép bạn tạo các lớp ORM-phong cách đơn giản mà có thể thực hiện xác nhận, cho phép truy cập vào các tài liệu dot, kết quả queryset tự động bọc, và cung cấp cho bạn trước / sau tiết kiệm móc.
Nó được thiết kế với microframeworks trong tâm trí, nhưng là ứng dụng và khuôn khổ thuyết bất khả tri. Nó có nghĩa là để đơn giản hóa việc sử dụng các pymongo và cung cấp công cụ cho các thành ngữ thông thường, không làm mờ pymongo hoặc MongoDB từ các cấu trúc dữ liệu của bạn.
Bạn được chào đón để mở vấn đề hoặc gửi yêu cầu kéo trên github micromongo của
micromongo làm cho một vài quyết định thiết kế trong tên của đơn giản hóa mà có thể không làm việc cho bạn:
& Nbsp; - & nbsp; micromongo duy trì một kết nối duy nhất toàn cầu, do đó, bạn không thể có mô hình kết nối đến nhiều máy chủ MongoDB
& Nbsp; - & nbsp; có một handfull của tên mẫu và tài liệu các tên thuộc tính đó sẽ không làm việc với các mô hình micromongo; này sẽ được đề cập trong các tài liệu đầy đủ
& Nbsp; - & nbsp; bạn chỉ có thể có một mô hình cho mỗi bộ sưu tập
bắt đầu
Để bắt đầu với micromongo, chỉ cần nhập nó:
>>> Từ nhập khẩu micromongo kết nối, Model
>>> C = connect ()
kết nối có các lập luận tương tự như đối tượng Connection của pymongo, và hoạt động gần như giống nhau, ngoại trừ việc nó cố gắng để tự động trả về kết quả truy vấn được bọc trong các lớp mô hình thích hợp. Các đối tượng kết nối mà bạn tạo ra thông qua cuộc gọi này sẽ được lưu trữ và sử dụng bởi các cơ sở ORM-phong cách khác nhau, như Model.save (), Model.proxy, vv Nếu bạn muốn có một sạch sẽ, đối tượng kết nối tiêu chuẩn, bạn có thể nhận được một cách dễ dàng :
>>> Từ micromongo nhập clean_connection
>>> Sạch = clean_connection ()
Lưu ý rằng clean_connection không lấy đối số và sẽ luôn luôn trả về một lớp kết nối sạch sẽ với các thiết lập tương tự như các kết nối micromongo hiện.
Với các đối tượng kết nối, bạn có thể tạo ra cơ sở dữ liệu hoặc làm bất cứ điều gì bạn làm với đối tượng pymongo bình thường:
>>> Db = c.test_db
>>> Thu = db.test_collection
>>> Collection.save ({"docid": 1, "không đạt": False})
>>> Collection.find_one ()
{U'_id ': ObjectId (' ... '), u'fail': False, u'docid ': 1}
Bạn cũng có thể khai báo mẫu của riêng bạn cho một bộ sưu tập đặc biệt trong phong cách khai báo:
>>> Class TestModel (Model):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bộ sưu tập = 'test_db.test_collection'
>>> Collection.find_one ()
Những lớp học có một số tính năng bổ sung trên một từ điển mà có thể làm cho họ nhiều thuận tiện hơn để sử dụng. Các phím đều có thể truy cập tài liệu như các thuộc tính:
>>> T = collection.find_one ()
>>> T.fail
Sai
>>> T.docid
1
Các tài liệu cũng có thể dễ dàng tiếp tục tồn tại để các cơ sở dữ liệu:
>>> T.docid = 17
>>> T.save ()
>>> Clean.test_db.test_collection.find_one ()
{U'_id ': ObjectId (' ... '), u'fail': False, u'docid ': 17}
xác định mô hình
Ở trên, các thuộc tính bộ sưu tập đã được gán cho model Foo của chúng tôi. Đây là một phím tắt, mặc dù; nếu cơ sở dữ liệu và các bộ sưu tập được giao một cách riêng biệt, mô hình có thể tìm ra các tên bộ sưu tập đầy đủ. Nếu bộ sưu tập và cơ sở dữ liệu không có mặt, micromongo cố gắng để con số nó ra dựa trên lớp và module tên Model của bạn. Ví dụ, blog.Post sẽ trở thành blog.post, hoặc stream.StreamEntry sẽ trở thành stream.stream_entry. Rõ ràng là tốt hơn so với tiềm ẩn, và nó được khuyến khích mà bạn thiết lập các bộ sưu tập bằng tay.
Bên cạnh đó đóng gói và giải nén các kết quả từ cơ sở dữ liệu, mô hình này cũng có thể định nghĩa một tài liệu spec mà có thể xác định giá trị mặc định và thực hiện xác nhận trước khi lưu các mô hình. Đi một bài đăng blog model tầm thường:
>>> Từ nhập khẩu micromongo.spec *
>>> Class Post (Model):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bộ sưu tập = 'test_db.blog_posts'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; đặc tả = dict (
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; author = Field (yêu cầu = True, mặc định = 'jmoiron', type = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; title = Field (yêu cầu = False, mặc định = '', type = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; công bố = Field (yêu cầu = True, mặc định = False, type = [True, False]),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; body = Field (type = unicode),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; timestamp = Field (),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; )
>>> P = Post.new ()
>>> P
Một vài điều đang xảy ra ở đây. Các lĩnh vực mà có một mặc định lại được khởi động để mà mặc định xem họ có cần hay không. Nếu một trường bắt buộc không có một mặc định, nó được khởi tạo để None.
Các trường có thể mất một đối số kiểu, mà mỗi khi có thể là một thể gọi có một giá trị và trả về True hoặc False, một hoặc nhiều loại cơ sở, hoặc một hoặc nhiều giá trị. Nếu một hoặc nhiều loại được cung cấp, isinstance được sử dụng để kiểm tra rằng giá trị là các loại quyền. Nếu một hoặc nhiều giá trị được cung cấp, các Dòng hoạt động như một loại enum, kiểm tra xem giá trị trong tập hợp của các giá trị. Nếu không có loại được đưa ra, xác nhận luôn đi trên một lĩnh vực, trừ khi nó được yêu cầu và vắng mặt.
Nếu một lĩnh vực trong p được đưa ra một loại không hợp lệ, sau đó một ValueError ra là:
>>> P.title = 10
>>> P.save ()
Traceback (hầu hết cuộc gọi gần đây nhất):
& Nbsp; ...
ValueError: Keys không phù hợp với spec: ['title']
>>> Del p.author
>>> P.save ()
Traceback (hầu hết cuộc gọi gần đây nhất):
& Nbsp; ...
ValueError: Thiếu trường: ['tác giả'], các trường không hợp lệ: ['title']
>>> P.title = 'blogpost đầu tiên của tôi'
>>> P.author = 'jmoiron'
>>> P.published = True
>>> P.body = u "Đây là bài blog đầu tiên của tôi .. & nbsp; Tôi rất vui mừng!"
>>> P.save ()
Model.find
Để thuận tiện và khô, Model.find là một classmethod mà sẽ sử dụng con trỏ micromongo để tìm ra chống lại việc thu đúng. Phương pháp này hoạt động chính xác giống như Collection.find pymongo của.
lớp Cursor chút thay đổi micromongo cũng làm cho một phương pháp order_by django lấy cảm hứng cho tất cả các con trỏ (tìm thấy bất cứ điều gì và bạn chuỗi ra nếu nó trả về một con trỏ). Bạn có thể vượt qua một hoặc nhiều tên trường, với một tùy chọn hàng đầu '-', để sắp xếp mọi thứ bằng cách tăng dần hoặc giảm dần.
Những thay đổi này cho phép bạn sử dụng hầu hết các sức mạnh của pymongo mà không cần phải nhập nó, và cho phép bạn tránh lặp lại không cần thiết của các vị trí của dữ liệu của bạn.
trường lớp con
Bạn được khuyến khích để tạo ra Fields của riêng bạn mà làm những gì bạn muốn. Dòng lớp con có một chức năng móc pre_validate đó có một giá trị vào và có thể chuyển đổi nó tuy nhiên họ muốn. Lưu ý rằng điều này sẽ chỉ làm việc nếu các lĩnh vực đang thực hiện; do đó, để có được một cái gì đó giống như một auto_now_add trên DateTimeField, bạn sẽ muốn làm cho nó cần thiết và có pre_validate của nó chuyển sang Không vào datetime.datetime.now ()
Yêu cầu .
- Python
Bình luận không