欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Python中使用mongoengine操作MongoDB教程

 更新時間:2015年04月24日 15:25:00   作者:C Wong  
這篇文章主要介紹了在Python中使用mongoengine操作MongoDB教程,包括在Django下的一些使用技巧,需要的朋友可以參考下

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

easy_install pymongo # 依賴庫
easy_install mongoengine

基本使用

from mongoengine import *
from datetime import datetime
# 連接數(shù)據(jù)庫
connect('blog') # 連接本地blog數(shù)據(jù)庫
# 如需驗證和指定主機(jī)名
# 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使用很類似,所以也不解釋什么.
插入

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

查詢和更新

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

# 返回集合里的所有文檔對象的列表
cate = Categories.objects.all()

# 返回所有符合查詢條件的結(jié)果的文檔對象列表
cate = Categories.objects(name="Python")
# 更新查詢到的文檔:
cate.name = "LinuxZen"
cate.update()
查詢數(shù)組 默認(rèn)查詢數(shù)組"="代表的意思是in:
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 引用字段:

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

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)

插入引用字段

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

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

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

>>> cate = Posts.objects.all().first().categories
>>> cate

>>> cate.name

u'Linux'

查詢包含Linux分類的文章

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

EmbeddedDocument 嵌入文檔

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

class Posts(Document):

 title = StringField(max_length=100, required=True)
 content = StringField(required=True)
 tags = ListField(EmbeddedDocumentField('Tags')required=True)
 categories = ReferenceField(Categories)

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

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

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

>>> 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
mysite

時間段查詢

 start = datetime(int(year), int(month), 1)
 if int(month) + 1 > 12:
  emonth = 1
  eyear = int(year) + 1
 else:
  emonth = int(month) + 1
  eyear = int(year)
 end = datetime(eyear, emonth, 1)
 articles = Posts.objects(date__gte=start, date__lt=end).order_by('-date')

分片

slice用于分片

# comments - skip 5, limit 10
Page.objects.fields(slice__comments=[5, 10])

# 也可以使用索引值分片

# limit 5
users = User.objects[:5]

# skip 5
users = User.objects[5:]

# skip 10, limit 15
users = User.objects[10:15]

使用原始語句查詢

如果想使用原始的pymongo查詢方式可以使用__raw__操作符 Page.objects(raw={'tags':'coding'}) 使用$inc和$set操作符

# 更新嵌入文檔comments字段by的值為joe的文檔字段votes增加1
Page.objects(comments_by="joe").update(inc__votes=1)

# 更新嵌入文檔comments字段by的值為joe的文檔字段votes設(shè)置為1
Page.objects(comments_by="joe").update(set__votes=1)

其他技巧

#查詢結(jié)果轉(zhuǎn)換成字典
users_dict = User.objects().to_mongo()

# 排序,按日期排列
user = User.objects.order_by("date")

# 按日期倒序

user = User.objects.order_by("-date")

 

相關(guān)文章

  • Python利用smtplib實現(xiàn)郵件發(fā)送

    Python利用smtplib實現(xiàn)郵件發(fā)送

    在當(dāng)今數(shù)字時代,電子郵件已成為我們生活和工作中不可或缺的一部分,本篇文章將為你講解如何在Python發(fā)送郵件,并為你提供實現(xiàn)的多種方式,希望對大家有所幫助
    2023-06-06
  • 使用python實現(xiàn)微信小程序自動簽到功能

    使用python實現(xiàn)微信小程序自動簽到功能

    這篇文章主要介紹了使用python實現(xiàn)微信小程序自動簽到功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 淺談pytorch、cuda、python的版本對齊問題

    淺談pytorch、cuda、python的版本對齊問題

    今天小編就為大家分享一篇淺談pytorch、cuda、python的版本對齊問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 詳解python中executemany和序列的使用方法

    詳解python中executemany和序列的使用方法

    這篇文章主要介紹了詳解python中executemany和序列的使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 基于Python編寫一個微博抽獎小程序

    基于Python編寫一個微博抽獎小程序

    本文將利用Python編寫一個微博抽獎小程序,夢想總是要有的,萬一靠在微博上自動抽獎暴富了呢~文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • Python中l(wèi)oguru日志庫的使用

    Python中l(wèi)oguru日志庫的使用

    本文主要介紹了Python中l(wèi)oguru日志庫的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python基于TensorFlow接口實現(xiàn)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)回歸

    Python基于TensorFlow接口實現(xiàn)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)回歸

    這篇文章主要為大家詳細(xì)介紹了如何基于Python語言中TensorFlow的tf.estimator接口,實現(xiàn)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)回歸的具體方法,感興趣的可以了解一下
    2023-02-02
  • Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析

    Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析

    這篇文章主要介紹了Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析,nonlocal關(guān)鍵字用來在函數(shù)或其他作用域中使用外層變量,global關(guān)鍵字用來在函數(shù)或其他局部作用域中使用全局變量,更多香瓜內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • 50行Python代碼實現(xiàn)人臉檢測功能

    50行Python代碼實現(xiàn)人臉檢測功能

    現(xiàn)在的人臉識別技術(shù)已經(jīng)得到了非常廣泛的應(yīng)用,支付領(lǐng)域、身份驗證、美顏相機(jī)里都有它的應(yīng)用。下面小編給大家?guī)砹嘶?0行Python代碼實現(xiàn)人臉檢測功能,一起看看吧
    2018-01-01
  • Python2實現(xiàn)的圖片文本識別功能詳解

    Python2實現(xiàn)的圖片文本識別功能詳解

    這篇文章主要介紹了Python2實現(xiàn)的圖片文本識別功能,結(jié)合實例形式分析了Python pytesser庫的安裝及使用pytesser庫識別圖片文字相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07

最新評論