MongoEngine MongoDB 的 ORM 库

本文介绍了如何使用Python的mongoengine库进行MongoDB数据库操作,包括增删查改,以及对象文档映射的使用。同时,讲解了NoSQLManager for MongoDB的专业版激活方法,提供了一种延长试用期的途径。内容涵盖数据库连接、数据存储和查询,以及文档的更新和删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NoSQL Manager for MongoDB操作

远程连接服务器数据库在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

pymongo的弊端

pymongo来操作mongodb数据库,但是直接把数据库的操作代码写在脚本中,使得应用代码的耦合性太强,不利于代码的优化管理

mongoengine是一个对象文档映射器(ODM),相当于基于sql对象关系映射器(ORM)

安装mongoengine

pip install mongoengine

事先声明一个继承mongoengine.document的类

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

user1=Users(name='XIXI',age=11)
user1.save()
user2=Users(name='fiona',age=12)
user2.save()
print('user1:',user1)
print('user2:',user2)
print('user1的name:',user1.name)
print('user2的name:',user2.name)
print('-'*50)

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

在这里插入图片描述

#查询年龄大于等于10,小于30的,按姓名排列
from mongoengine import *
connect('test', 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=30).order_by('name')  #倒序('-name'for search in User_search:
  print(search.name)


#查询name为詹姆斯的人
user_search = Users.objects(name='詹姆斯')
for search in user_search:
    print(search.name)

#修改name为詹姆斯的age加1
user_update = Users.objects(name='詹姆斯').update(inc__age=1)
#修改完成之后要在查询一遍
user_search = Users.objects(name='詹姆斯')
for user in user_search:
    print(user.name)
修改name为詹姆斯的age为18

user_update=Users.objects(name='詹姆斯').update(set__age=18)
#user_update返回的是数量
user_search = Users.objects(name='詹姆斯')

from mongoengine import *
from datetime import datetime

#连接数据库:test
# connect('test')    # 连接本地test数据库
connect('test', host='127.0.0.1', port=27017#username='test', password='test' 如果数据库用户密码不记得或者记错 会报错 

# Defining our documents
# 定义文档user,post,对应集合user,post
class User(Document):
    # required为True则必须赋予初始值
    email = StringField(required=True)
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)
    date = DateTimeField(default=datetime.now(), required=True)

# Embedded documents,it doesn’t have its own collection in the database
class Comment(EmbeddedDocument):
    content = StringField()
    name = StringField(max_length=120)

class Post(Document):
    title = StringField(max_length=120, required=True)
    # ReferenceField相当于foreign key
    author = ReferenceField(User)
    tags = ListField(StringField(max_length=30))
    comments = ListField(EmbeddedDocumentField(Comment))
    # 允许继承
    meta = {'allow_inheritance': True}

class TextPost(Post):
    content = StringField()

class ImagePost(Post):
    image_path = StringField()

class LinkPost(Post):
    link_url = StringField()

class Page(DynamicDocument):
    title = StringField(max_length=200, required=True)
    date_modified = DateTimeField(default=datetime.now())

添加数据


john = User(email='john@example.com', first_name='John', last_name='Tao').save()
ross = User(email='ross@example.com')
ross.first_name = 'Ross'
ross.last_name = 'Lawley'
ross.save()

comment1 = Comment(content='Good work!',name = 'LindenTao')
comment2 = Comment(content='Nice article!')
post0 = Post(title = 'post0',tags = ['post_0_tag'])
post0.comments = [comment1,comment2]
post0.save()

post1 = TextPost(title='Fun with MongoEngine', author=john)
post1.content = 'Took a look at MongoEngine today, looks pretty cool.'
post1.tags = ['mongodb', 'mongoengine']
post1.save()

post2 = LinkPost(title='MongoEngine Documentation', author=ross)
post2.link_url = 'http://docs.mongoengine.com/'
post2.tags = ['mongoengine']
post2.save()

# Create a new page and add tags
page = Page(title='Using MongoEngine')
page.tags = ['mongodb', 'mongoengine']
page.save()

在这里插入图片描述

查看数据

for post in Post.objects:
    print post.title
    print '=' * len(post.title)

    if isinstance(post, TextPost):
        print post.content

    if isinstance(post, LinkPost):
        print 'Link:', post.link_url

通过引用字段直接获取引用文档对象

for post in TextPost.objects:
    print post.content
    print post.author.email  
au = TextPost.objects.all().first().author
print au.email

通过标签查询

for post in Post.objects(tags='mongodb'):
    print post.title   
num_posts = Post.objects(tags='mongodb').count()
print 'Found %d posts with tag "mongodb"' % num_posts

多条件查询(导入Q类)

User.objects((Q(country='uk') & Q(age__gte=18)) | Q(age__gte=20))   

更新文档

ross = User.objects(first_name = 'Ross')
ross.update(date = datetime.now())
User.objects(first_name='John').update(set__email='123456@qq.com')
//对 lorem 添加商品图片信息
lorempic = GoodsPic(name='l2.jpg', path='/static/images/l2.jpg')
lorem = Goods.objects(id='575d38e336dc6a55d048f35f')
lorem.update_one(push__pic=lorempic)

删除文档

ross.delete()

nosql manafer for MongoDB Professional的使用

https://www.cnblogs.com/TurboWay/p/8213656.html

NoSQL Manager for MongoDB 破解

删除这两个地方的东西就好了

运行 -->regedit 

HKEY_CURRENT_USER\Software\NoSQL Manager Group

 

删除该文件夹

C:\ProgramData\NoSQL Manager Group

 

NoSQL Manager for Cassand

重启,继续免费试用30
官方软件安装后,若无注册码会有 30 天的试用期。若30天试用期满了后,可进行以下操作进行重置:

删除注册表:HKEY_CURRENT_USER\Software\NoSQL Manager Group
备份appConfig.xml文件(里面有你的数据库配置信息,包括帐号密码)
删除应用数据:C:\ProgramData\NoSQL Manager Group
或者使用 RunAsDate 软件进行时间重置也可以达到这个效果
mongodb-orm简介Mongodb ORM是基于java的ORM框架,简化了SDK的使用,使代码变得更清晰、简单。 与Ibatis类似,将查询、执行语句封装在xml中,与代码隔离。简称MQL。 项目中使用加入mongodb orm的支持包1. 添加jar包或maven支持<dependency>     <groupId>com.mongodborm</groupId>     <artifactId>mongodb-orm</artifactId>     <version>0.0.1-RELEASE</version> </dependency>2. 初始化mongodb templet        spring中初始化<bean id="mongoTemplet" class="com.mongodb.client.MongoClientTemplet">     <property name="factory">         <bean class="com.mongodb.client.MongoORMFactoryBean">             <property name="dataSource">                 <bean class="com.mongodb.client.MongoDataSource">                     <property name="nodeList" value="127.0.0.1:27017" />                     <property name="dbName" value="your db name" />                     <property name="userName" value="user name" />                     <property name="passWord" value="password" /> <!-- 可使用默认值 --> <property name="connectionsPerHost" value="" />                     <property name="threadsAllowedToBlock" value="" />                     <property name="connectionTimeOut" value="" />                     <property name="maxRetryTime" value="" />                     <property name="socketTimeOut" value="" />                 </bean>             </property>             <property name="configLocations">                 <list>                     <value>classpath:mql/mongo-mql.xml</value>                 </list>             </property>         </bean>     </property> </bean>        代码初始化    try {       Resource resource =  new ClassPathResource("mongo-mql.xml");           MongoORMFactoryBean factory = new MongoORMFactoryBean();       factory.setConfigLocations(new Resource[]{resource});       factory.init();          MongoClientTemplet templet = new MongoClientTemplet();       templet.setFactory(factory);       templet.init();     } catch(Exception e) {       e.printStackTrace();     }编写MQLMapping<mapping id="model" class="test.mongodborm.Model">         <property column="_id" name="id" />         <property column="name" name="name" />         <property column="time" name="time" value="0" />         <property column="status" name="status" /> </mapping> <mapping id="extendModel" class="test.mongodborm.Model" extends="model">     <property column="newProperty" name="newProperty" /> </mapping>  select<select id="queryModelList" collection="test_sample">     <query class="java.lang.String">         <property column="name" name="${value}" />     </query>     <field mapping="model" />     <order>         <property column="time" value="desc" />     </order> </select> update/findAndModify<update id="updateModel" collection="test_sample">     <query class="test.mongodborm.Model$Child">         <property column="name" name="name" ignoreNull="true" />         <property column="time" operate="gte" value="0" type="number" />         <property column="status" operate="in">             <list type="number">0,1</list>         </property>     </query>     <action class="java.util.Map">         <property column="name" name="name" operate="set" />         <property column="status" operate="set" />     </action> </update>有嵌套的查询<select id="queryModelList3" collection="test_sample">     <query class="java.lang.String">         <property column="_id" value="${value}" />         <property column="time" value="0" type="number" />     </query>     <field class="java.util.Map">         <property column="name" name="name" />         <property column="parent" name="parent">             <value class="test.mongodborm.Model$Parent">                 <property column="name" name="name" />                 <property column="child" name="child">                     <value class="test.mongodborm.Model$Child">                         <property column="name" name="name" />                         <property column="time" name="time" value="0" />                     </value>                 </property>                 <property column="data" name="data">                     <value class="java.util.Map">                         <property column="title" name="title" />                         <property column="content" name="content" />                     </value>                 </property>             </value>         </property>         <property column="data" name="data">             <value class="java.util.Map">                 <property column="title" name="title" />                 <property column="content" name="content" />             </value>         </property>     </field>     <order class="java.util.Map">         <property column="time" name="time" value="desc" />     </order> </select>Templet用法Model model = mongoTemplet.findOne("queryModelList", "yuxiangping"); List<Model> list = mongoTemplet.findOne("queryModelList", ""); Model model = new Model(); model.setTime(1L); Map<String, String> action = new HashMap<String, String>(); action.put("name", "yuxiangping-update"); int update = mongoT emplet.update("updateModel", model, action);        更多的使用方法参见 sample.xml 标签:Mongodb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值