萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 在Python中使用mongoengine操作MongoDB教程

在Python中使用mongoengine操作MongoDB教程

   在Python中使用mongoengine操作MongoDB教程

         這篇文章主要介紹了在Python中使用mongoengine操作MongoDB教程,包括在Django下的一些使用技巧,需要的朋友可以參考下

  最近重新拾起Django,但是Django並不支持mongodb,但是有一個模塊mongoengine可以實現Django Model類似的封裝.但是mongoengine的中文文檔幾乎沒有,有的也是簡短的幾句介紹和使用.下面我就分享一下我在使用過程中所記錄下的一些筆記,可能有點亂.大家可以參考一下.

  安裝mongoengine

  ?

1 2 easy_install pymongo # 依賴庫 easy_install mongoengine

  基本使用

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 from mongoengine import * from datetime import datetime # 連接數據庫 connect('blog') # 連接本地blog數據庫 # 如需驗證和指定主機名 # connect('blog', host='192.168.3.1', username='root', password='1234')   # 定義分類文檔 class Categories(Document): ' 繼承Document類,為普通文檔 ' name = StringField(max_length=30, required=True) artnum = IntField(default=0, required=True) date = DateTimeField(default=datetime.now(), required=True)

  和Django的model使用很類似,所以也不解釋什麼.

  插入

  ?

1 2 cate = Categories(name="Linux") # 如果required為True則必須賦予初始值,如果有default,賦予初始值則使用默認值 cate.save() # 保存到數據庫

  查詢和更新

  文檔類有一個 objects 屬性.我們使用它來查詢數據庫.

  ?

1 2 3 4 5 6 7 8 # 返回集合裡的所有文檔對象的列表 cate = Categories.objects.all()   # 返回所有符合查詢條件的結果的文檔對象列表 cate = Categories.objects(name="Python") # 更新查詢到的文檔: cate.name = "LinuxZen" cate.update()

  查詢數組 默認查詢數組"="代表的意思是in:

  ?

1 2 3 4 5 6 7 8 9 10 11 class Posts(Document): artid = IntField(required=True) title = StringField(max_length=100, required=True) content = StringField(required=True) author = ReferenceField(User) tags = ListField(StringField(max_length=20, required=True), required=True) categories = ReferenceField(Categories), required=True) comments = IntField(default=0, required=True)   # 將會返回所有tags包含coding的文檔 Posts.objects(tags='coding')

  ReferenceField 引用字段:

  通過引用字段可以通過文檔直接獲取引用字段引用的那個文檔:

  ?

1 2 3 4 5 6 7 8 9 10 11 class Categories(Document): name = StringField(max_length=30, required=True) artnum = IntField(default=0, required=True) date = DateTimeField(default=datetime.now(), required=True)   class Posts(Document):   title = StringField(max_length=100, required=True) content = StringField(required=True) tags = ListField(StringField(max_length=20, required=True), required=True) categories = ReferenceField(Categories)

  插入引用字段

  ?

1 2 3 4 cate =Categories(name="Linux") cate.save() post = Posts(title="Linuxzen.com", content="Linuxzen.com",tags=["Linux","web"], categories=cate) post.save()

  通過引用字段直接獲取引用文檔對象

  一般文檔查詢會返回一個列表(盡管只有一個結果),我們想要獲得一個文檔對象可以使用索引獲取第一個文檔對象,但是mongoengine建議使用first()來獲取第一個:

  ?

1 2 3 4 >>> cate = Posts.objects.all().first().categories >>> cate   >>> cate.name

  u'Linux'

  查詢包含Linux分類的文章

  ?

1 2 >>> cate = Categories.objects(name="Linux").first() >>> Posts.objects(categories=cate)

  EmbeddedDocument 嵌入文檔

  繼承EmbeddedDocument的文檔類就是嵌入文檔,嵌入文檔用於嵌入其他文檔的EmbeddedDocumentField 字段,比如上面例子的tags字段如果改成嵌入文檔的話可以將Posts文檔類改成如下方式:

  ?

1 2 3 4 5 6 class Posts(Document):   title = StringField(max_length=100, required=True) content = StringField(required=True) tags = ListField(EmbeddedDocumentField('Tags')required=True) categories = ReferenceField(Categories)

  還需要添加一個Tags嵌入文檔類:

  ?

1 2 3 class Tags(EmbeddedDocument): name = StringField() date = DateTimeField(default=datetime.now())

  我們像如下方式插入Posts文檔中的Tags

  ?

1 2 3 4 5 6 7 8 9 10 11 >>> tag = Tags(name="Linuxzen") >>> post = Posts(title="Linuxzen.com", content="Linuxzen.com", tags=[tag], categories=cate) >>> tag = Tags(name="mysite") >>> post.tags.append(tag) >>> post.save() >>> tags = post.tags >>> for tag in tags: print tag.name   Linuxzen
copyright © 萬盛學電腦網 all rights reserved