为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。
MongoEngine官方文档:http://docs.mongoengine.org/tutorial.html
Mongoengine是一个用于在 Python 应用程序中操作 MongoDB 数据库的 Object-Document Mapping (ODM) 库。它允许开发人员使用 Python 类来定义数据模型,然后通过这些模型执行数据库操作,而不需要编写原始的MongoDB查询语句。以下是Mongoengine的一些关键特点和用途:
Mongoengine 在与 MongoDB 一起构建 Python 应用程序时非常有用,特别是对于那些需要处理半结构化或非关系型数据的应用程序。通过 Mongoengine,开发人员可以更轻松地管理和操作 MongoDB 中的数据,而不需要直接操作原始的 MongoDB 查询语句。
使用pip安装MongoEngine:打开终端(命令行)并运行以下命令来安装MongoEngine:
pip install mongoengine
这会使用pip工具从Python Package Index(PyPI)安装MongoEngine库。
一旦MongoEngine安装完成,你可以在Python中使用它来连接到MongoDB。以下是连接到MongoDB的步骤:
from mongoengine import connect
# 连接到MongoDB
connect(
db='your_database_name',
host='your_mongodb_uri', #默认端口为27017时可以不写
username='your_username', # 如果需要认证
password='your_password' # 如果需要认证
)
上述代码中的参数含义如下:
db: 要连接的数据库名称。
host: MongoDB服务器的URI。通常,这是MongoDB服务器的IP地址和端口号(例如:‘mongodb://localhost:27017’),但也可以包括其他连接参数,如认证信息。
username(可选): 如果MongoDB服务器需要用户名和密码进行身份验证,则提供MongoDB用户名。
password(可选): 如果MongoDB服务器需要用户名和密码进行身份验证,则提供MongoDB密码。
使用MongoEngine定义一个简单的数据模型需要遵循以下步骤:
1. 导入必要的类和字段类型:
from mongoengine import Document, StringField, IntField
2. 创建一个继承自 Document 的类作为你的数据模型:
class Person(Document):
pass
3. 在数据模型类中定义字段,可以使用MongoEngine提供的字段类型:
class Person(Document):
name = StringField(required=True, max_length=100)
age = IntField()
在上述代码中,我们定义了两个字段:name 和 age。StringField表示一个字符串字段,IntField表示一个整数字段。你可以根据需要选择其他字段类型,如BooleanField(布尔字段)、ListField(列表字段)等。
在字段定义中,你可以传递多个参数来指定字段的行为,如上述示例中的required=True表示该字段是必需的,max_length=100表示该字段的最大长度为100个字符。
4. 操作数据
这样,你就完成了一个简单的数据模型的定义。现在可以使用该模型来执行数据库操作,如插入数据、查询数据等。
person = Person(name='John Doe', age=25)
person.save() # 插入数据
# 查询数据
people = Person.objects(name='John Doe')
for p in people:
print(p.name, p.age)
在上述代码中,我们创建了一个Person对象并保存到数据库中。然后,使用 Person.objects 方法通过查询条件来检索 Person 对象,并遍历结果打印出对象的 name 和 age 字段。
from mongoengine import StringField
class Person(Document):
name = StringField(max_length=100)
from mongoengine import IntField
class Product(Document):
price = IntField()
from mongoengine import FloatField
class Product(Document):
weight = FloatField()
from mongoengine import BooleanField
class Task(Document):
completed = BooleanField(default=False)
from mongoengine import DateTimeField
class Event(Document):
event_date = DateTimeField()
from mongoengine import ListField
class ShoppingCart(Document):
items = ListField(StringField())
from mongoengine import EmbeddedDocument, EmbeddedDocumentField
class Address(EmbeddedDocument):
street = StringField()
city = StringField()
state = StringField()
class Person(Document):
name = StringField()
address = EmbeddedDocumentField(Address)
from mongoengine import ReferenceField
class Comment(Document):
text = StringField()
class Post(Document):
title = StringField()
comments = ListField(ReferenceField(Comment))
1. 通用参数
name = StringField(required=True)
age = IntField(default=0)
email = StringField(unique=True)
book_id = IntField(primary_key=True)
gender = StringField(choices=['male', 'female', 'other'])
name = StringField(verbose_name='Full Name')
age = IntField(help_text='Please enter your age in years.')
2. StringField:
name = StringField(max_length=100, min_length=2, regex=r'^[A-Za-z ]*$', choices=['Mr.', 'Mrs.', 'Ms.'])
3. IntField:
age = IntField(min_value=0, max_value=150)
4. FloatField:
price = FloatField(min_value=0.0, max_value=1000.0)
5. BooleanField:
completed = BooleanField()
6. DateTimeField:
created_at = DateTimeField(default=datetime.datetime.now, auto_now=True)
7. ListField:
items = ListField(StringField(max_length=50))
8. EmbeddedDocumentField:
class Address(EmbeddedDocument):
street = StringField()
city = StringField()
address = EmbeddedDocumentField(Address)
9. ReferenceField:
class Comment(Document):
text = StringField()
class Post(Document):
title = StringField()
comments = ListField(ReferenceField(Comment, reverse_delete_rule=CASCADE))
欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)