最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用ORM控制MongoDB(MongoEngine)的步驟全紀(jì)錄

 更新時(shí)間:2018年09月13日 14:41:58   作者:yuantc  
MongoEngine是一個(gè)對(duì)象文檔映射器(ODM),相當(dāng)于一個(gè)基于SQL的對(duì)象關(guān)系映射器(ORM),下面這篇文章主要給大家介紹了關(guān)于Python利用ORM控制MongoDB(MongoEngine)的相關(guān)資料,需要的朋友可以參考下

簡介:

MongoEngine 是一個(gè)Document-Object Mapper (想一下ORM, 但它是針對(duì)文檔型數(shù)據(jù)庫),Python通過它與MongoDB交互。你可能會(huì)說那PyMongo也是ORM啊,在Python中一切都是對(duì)象,但我們所說的ORM中的Object在指Python中的自定義類,而不是內(nèi)置類型。MongoEngine或MongoKit將MongoDB的數(shù)據(jù)映射成自定義類實(shí)例,它們都是基于PyMongo的。
我們可以跟關(guān)系型數(shù)據(jù)庫的Python客戶端MySQLdb,以及ORM SQLAlchemy/Django ORM比較一下,PyMongo相當(dāng)于MySQLdb,MongoEngine相當(dāng)于SQLAlchemy,SQLAlchemy是基于MySQLdb之上的,MongoEngine是基于PyMongo的。

pymongo來操作MongoDB數(shù)據(jù)庫,但是直接把對(duì)于數(shù)據(jù)庫的操作代碼都寫在腳本中,這會(huì)讓應(yīng)用的代碼耦合性太強(qiáng),而且不利于代碼的優(yōu)化管理

一般應(yīng)用都是使用MVC框架來設(shè)計(jì)的,為了更好地維持MVC結(jié)構(gòu),需要把數(shù)據(jù)庫操作部分作為model抽離出來,這就需要借助MongoEngine,MongoEngine提供的抽象是基于類的,創(chuàng)建的所有模型都是類
我們可以跟關(guān)系型數(shù)據(jù)庫的Python客戶端MySQLdb,以及ORM SQLAlchemy/Django ORM比較一下,PyMongo相當(dāng)于MySQLdb,MongoEngine相當(dāng)于SQLAlchemy,SQLAlchemy是基于MySQLdb之上的,MongoEngine是基于PyMongo的

安裝

pip install mongoengine

使用

1.使用時(shí)先聲明一個(gè)繼承自MongoEngine.Document的類

在類中聲明一些屬性,相當(dāng)于創(chuàng)建一個(gè)用來保存數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),即數(shù)據(jù)已類似數(shù)據(jù)結(jié)構(gòu)的形式存入數(shù)據(jù)庫中,通常把這樣的一些類都存放在一個(gè)腳本中,作為應(yīng)用的Model模塊

from mongoengine import *
connect('mydb', host='localhost', port=27017)
import datetime
class Users(Document):
 name = StringField(required=True, max_length=200)
 age = IntField(required=True)

users = Users.objects.all() #返回所有的文檔對(duì)象列表
for u in users:
 print("name:",u.name,",age:",u.age)

2.保存文檔

required:設(shè)置必須;

default:如果沒有其他值給出使用指定的默認(rèn)值

unique:確保集合中沒有其他document有此字段的值相同

choices:確保該字段的值等于數(shù)組中的給定值之一

from mongoengine import *
connect('mydb', host='localhost', port=27017)
import datetime
class Users(Document):
 name = StringField(required=True, max_length=200)
 age = IntField(required=True)
user1 = Users(
 name='jack',
 age= 21
)
user1.save() 
print(user1.name)
user1.name = 'jack2'
user1.save()  
print(user1.name)

3.查詢10=<年齡<30的,按姓名排列

from mongoengine import *
connect('mydb', host='localhost', port=27017)
import datetime
class Users(Document):
 name = StringField(required=True, max_length=200)
 age = IntField(required=True)
user_search = Users.objects(age__gte=10, age__lt=33).order_by('name')
for u in user_search:
 print("name:",u.name,",age:",u.age)

查詢10=<年齡<30的,按姓名倒序

from mongoengine import *
connect('mydb', host='localhost', port=27017)
import datetime
class Users(Document):
 name = StringField(required=True, max_length=200)
 age = IntField(required=True)
user_search = Users.objects(age__gte=10, age__lt=33).order_by('-name')
for u in user_search:
 print("name:",u.name,",age:",u.age)

查詢name=jack2

from mongoengine import *
connect('mydb', host='localhost', port=27017)
import datetime
class Users(Document):
 name = StringField(required=True, max_length=200)
 age = IntField(required=True)

tmp = Users.objects(name="jack2")
for u in tmp:
 print("name:",u.name,",age:",u.age)

4.修改name=jack2 的age加1

from mongoengine import *
connect('mydb', host='localhost', port=27017)
import datetime
class Users(Document):
 name = StringField(required=True, max_length=200)
 age = IntField(required=True)
tmp = Users.objects(name="jack3").update(inc__age=1)
tmp = Users.objects(name="jack3")
for u in tmp:
 print("name:",u.name,",age:",u.age)

修改name=jack的age設(shè)為66

from mongoengine import *
connect('mydb', host='localhost', port=27017)
import datetime
class Users(Document):
 name = StringField(required=True, max_length=200)
 age = IntField(required=True)

tmp = Users.objects(name="jack").update(set__age=66)
tmp = Users.objects(name="jack")
for u in tmp:
 print("name:",u.name,",age:",u.age)

高級(jí)查詢

例如有時(shí)候你需要將約束條件進(jìn)行與,或的操作。你可以使用mongoengine提供的 Q 類來實(shí)現(xiàn),一個(gè) Q 類代表了一個(gè)查詢的一部分,里面的參數(shù)設(shè)置與你查詢document的時(shí)候相同。建立一個(gè)復(fù)雜查詢的時(shí)候,你需要用 & 或 | 操作符將 Q 對(duì)象連結(jié)起來,例子如下:

Post.objects(Q(name="jack") | Q(age=66))

查詢相關(guān)操作符

ne – 不等于
lt – 小于
lte – 小于等于
gt – 大于
gte – 大于等于
not – 使其檢查的反面,需要使用在其他操作符之前(e.g. Q(age__not__mod=5))
in – 值在list里面
nin – 值不在list里面
mod – value % x == y
all – list里面所有的值
size – 這個(gè)array的大小
exists – 存在這個(gè)值
#一下操作符在需要進(jìn)行正則檢查的時(shí)候是比較快捷的方法:
exact – 字符串型字段完全匹配這個(gè)值
iexact – 字符串型字段完全匹配這個(gè)值(大小寫敏感)
contains – 字符串字段包含這個(gè)值
icontains –字符串字段包含這個(gè)值(大小寫敏感)
startswith – 字符串字段由這個(gè)值開頭
istartswith –字符串字段由這個(gè)值開頭(大小寫敏感)
endswith – 字符串字段由這個(gè)值結(jié)尾
iendswith –字符串字段由這個(gè)值結(jié)尾(大小寫敏感)
match – 使你可以使用一整個(gè)document與數(shù)組進(jìn)行匹配查詢list

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python基于Socket實(shí)現(xiàn)簡單聊天室

    Python基于Socket實(shí)現(xiàn)簡單聊天室

    這篇文章主要為大家詳細(xì)介紹了Python基于Socket實(shí)現(xiàn)簡單聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 詳解從Django Rest Framework響應(yīng)中刪除空字段

    詳解從Django Rest Framework響應(yīng)中刪除空字段

    這篇文章主要介紹了詳解從Django Rest Framework響應(yīng)中刪除空字段,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 簡單介紹Python的輕便web框架Bottle

    簡單介紹Python的輕便web框架Bottle

    這篇文章主要介紹了Python的輕便web框架Bottle,因其注重輕便的設(shè)計(jì),與Flask一樣,Bottle框架的人氣同樣也非常高,需要的朋友可以參考下
    2015-04-04
  • 淺析Python裝飾器以及裝飾器模式

    淺析Python裝飾器以及裝飾器模式

    本篇文章給大家分享了關(guān)于Python裝飾器以及裝飾器模式的相關(guān)知識(shí)點(diǎn),一起跟著小編學(xué)習(xí)下吧。
    2018-05-05
  • graphviz 最新安裝教程適用初學(xué)者

    graphviz 最新安裝教程適用初學(xué)者

    Graphviz 是一個(gè)自動(dòng)排版的作圖軟件,可以生成 png pdf 等格式,這篇文章主要介紹了graphviz 2022最新安裝教程適用初學(xué)者,需要的朋友可以參考下
    2023-02-02
  • python開發(fā)一個(gè)解析protobuf文件的簡單編譯器

    python開發(fā)一個(gè)解析protobuf文件的簡單編譯器

    這篇文章主要介紹了python如何開發(fā)一個(gè)解析protobuf文件的簡單編譯器,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • python 實(shí)現(xiàn)多線程下載視頻的代碼

    python 實(shí)現(xiàn)多線程下載視頻的代碼

    這篇文章主要介紹了python 實(shí)現(xiàn)多線程下載視頻的代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 探索Python3.4中新引入的asyncio模塊

    探索Python3.4中新引入的asyncio模塊

    這篇文章主要介紹了Python3.4中新引入的asyncio模塊,包括其對(duì)端口和服務(wù)器等的操作,需要的朋友可以參考下
    2015-04-04
  • python中的測試框架

    python中的測試框架

    這篇文章主要介紹了python中測試框架的相關(guān)資料,幫助大家更好的理解和使用python進(jìn)行測試,感興趣的朋友可以了解下
    2020-11-11
  • 詳解Python如何實(shí)現(xiàn)Excel數(shù)據(jù)讀取和寫入

    詳解Python如何實(shí)現(xiàn)Excel數(shù)據(jù)讀取和寫入

    這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)對(duì)EXCEL數(shù)據(jù)進(jìn)行讀取和寫入,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

石泉县| 永修县| 本溪市| 武冈市| 永寿县| 东安县| 获嘉县| 建平县| 民乐县| 绵阳市| 北安市| 商洛市| 江西省| 台北市| 新乡县| 阿克陶县| 兴安盟| 察雅县| 三明市| 周至县| 南召县| 镇巴县| 湖北省| 米泉市| 彰武县| 湘乡市| 汉阴县| 右玉县| 宁都县| 曲水县| 河东区| 高淳县| 三门峡市| 广南县| 特克斯县| 巢湖市| 普宁市| 麟游县| 德令哈市| 尼勒克县| 宁强县|