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 AudioEffect不支持双簧管?   增加内存后出现java IntelliJ堆大小错误   在unix/linux中工作的java中将unicode字符串转换为ASCII   java是否缺少正确对齐输出的值?   java Spring 3 MVC:动态表单中的onetomany(创建/更新时添加/删除)   java在接口中创建两个通用参数   lambda使用Java 8从嵌套列表中使用forEach查找项的替代方法是什么?   Java正则表达式匹配10位电话号码,中间有空格   linux将log4j外部化。使用命令行Java的属性文件   带有SSL的java简单RMI服务器   java无法为事务[…]打开JPA EntityManager无法获取驱动程序类“null”和URL“null”的连接   Android设备上的java Oauth Foursquare   for循环的ImageButton名称的java骰子模拟浓缩   java有没有简单的1d条形码阅读器?   如何在调用resultset后解决“无效字符串或缓冲区长度”。从java到访问mdb的getString()连接   在Java8中,是否可以使用JVM参数来控制何时(或在什么条件下)卸载类?