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_SERVERenv var)。

如果应用程序在herokuazure上运行,则smartninja_mongo包会自动识别此内容并返回pymongo客户端类,而不是tinymongo中的客户端类。

如果您的程序在其他生产环境中运行,只需设置CUSTOM_MONGO_SERVERenv 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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android HttpClient cookies   如何使用Java在远程系统上运行SSH命令?   java从字符串数组中的字符串末尾删除“,”   在One plus 3t手机上,当应用程序被终止或从最近的应用程序中刷出时,java Android FCM推送通知不起作用   java如何使垂直滚动条始终位于jtable的末尾   在java中解析迄今为止“未知”的字符串   javascript在Java中获取Nashorn JsonObject   java windows 10和ubuntu可以使用相同的JDK吗?   java在不同的文件中记录不同的日志。但所有日志都放在同一个文件中   具有特定jdk的java Gradle构建项目   xml Java web服务生成错误响应   javascript Jaggery文件更改不显示   java输出二进制搜索树数组   将BufferedReader解析为JSON对象时,java在位置处意外标记文件结尾