smartninja mongo-一个简单的mongodb&tinydb包装器。
smartninja-mongo的Python项目详细描述
smartninja mongo
MongoDB(pymongo
)和TinyDB(tinymongo
)的简单包装器。它还提供了一个轻量级的对象文档映射器(odm)。
如果您不想(或不能)在本地安装MongoDB,请使用它。
安装
通过pip安装软件包:
pip install smartninja-mongo
或者将其添加到您的requirements.txt
中并运行pip install -r requirements.txt
。
依赖性
SmartNinja Mongo会自动安装以下依赖项:
tinymongo
pymongo
tinydb
tinydb_serialization
(用于轻松转换datetime对象)
工作原理
您可以像使用pymongo
包一样编写代码。除了从smartninja_mongo
库中获得MongoClient
类(请参见下面的示例)。
smartninja mongo会自动确定程序是在localhost上运行,还是在production服务器上运行。
如果它位于localhost上,那么将通过tinymongo
包使用tinydb而不是mongodb(除非设置了CUSTOM_MONGO_SERVER
env var)。
如果应用程序在heroku或azure上运行,则smartninja_mongo
包会自动识别此内容并返回pymongo
客户端类,而不是tinymongo
中的客户端类。
如果您的程序在其他生产环境中运行,只需设置CUSTOM_MONGO_SERVER
env var(向它添加任何返回为True
的值,例如"1"
),就会使用pymongo
客户机。
用法
smartninja mongo的唯一任务是为您提供正确的mongo客户端:
fromsmartninja_mongo.connectionimportMongoClientclient=MongoClient('mongodb://ds012345.mlab.com:56789/')
如果您的python程序在heroku上运行(例如),您将从pymongo
库中获得一个MongoClient
,该库与生产mongodb数据库(在本例中是mlab的mongo数据库)有连接。
但是如果你的应用在本地主机上运行,就会创建一个tinydb实例(你会看到创建了一个localhost.db
文件夹,将其放入.gitignore
)。
即使tinydb是在本地主机而不是mongodb上使用的,您也可以用mongodb的方式(或pymongo
的方式)编写代码。
请参见以下示例:
db=client.my_databasecollection=db.usersuser_id=collection.insert_one({"first_name":"Matej","last_name":"Ramuta","year_born":1987,"created":datetime.datetime.now()}).inserted_iduser_info=collection.find_one({"_id":user_id})print(user_info)
更多用法示例
有关更多用法示例,请参见pymongo文档:https://api.mongodb.com/python/current/。
当心
Tinymongo和Pymongo之间可能有一些不兼容之处。确保还检查TinyMongo docs以确定如果发生奇怪行为时的问题。
ODM
MongoDB接受数据作为字典,也返回数据作为dicts。如果希望在项目中使用模型类,可以使用SmartNinja Mongo库中的基本模型:
fromsmartninja_mongo.odmimportModelclassUser(Model):def__init__(self,first_name,**kwargs):self.first_name=first_namesuper().__init__(**kwargs)
确保添加**kwargs
作为参数,并在__init__
方法的末尾调用super()
。
或者,您可以完全跳过__init__
。
classUser(Model):pass
使用SmartNinja Mongo ODM的好处Model
主要的好处是,您可以获得一个名为:convert_dict_to_object()
:
user_info=collection.find_one({"_id":user_id})user_obj=User.convert_dict_to_object(data_dict=user_info)print(user_obj.first_name)
这个Model
类提供了一个非常轻量级和简单的对象文档映射(odm)。
贡献
热诚欢迎通过拉式请求捐款!
待办事项
- 测试
- ci