MongoDB的平面文件插入替换。需要tinydb

tinymongo的Python项目详细描述


logoBuild Status

目的

一个简单的包装器,用于替换mongodb tinydb。这个模块是一个 尝试添加当前使用pymongo的用户熟悉的接口。

状态

目前正在进行单元测试,功能正在 添加到库中。目前覆盖率为93%。测试的当前生成 在python版本2.7和3.3+上。

安装

最新的稳定版本可以通过pip install tinymongo安装。

该库目前正在快速开发中,并且是最新版本 可能是需要的。

在这种情况下,只需克隆此存储库,导航 到根项目目录,然后pip install -e .

或者使用pip install -egit+https://github.com/schapman1974/tinymongo.git#egg=tinymongo

这个 是纯python发行版,因此不需要外部 除了包含在python本身中的编译器或工具之外。

示例

快速启动如下所示。想更详细地了解tinymongo, 查看存储库中的demo.py。

fromtinymongoimportTinyMongoClient# you can include a folder name or absolute path# as a parameter if not it will default to "tinydb"connection=TinyMongoClient()# either creates a new database file or accesses an existing one named `my_tiny_database`db=connection.my_tiny_database# either creates a new collection or accesses an existing one named `users`collection=db.users# insert data adds a new record returns _idrecord_id=collection.insert_one({"username":"admin","password":"admin","module":"somemodule"}).inserted_iduser_info=collection.find_one({"_id":record_id})# returns the record inserted# you can also use it directlydb.users.insert_one({"username":"admin"})# returns a list of all users of 'module'users=db.users.find({'module':'module'})#update data returns True if successful and False if unsuccessfulupd=db.users.update_one({"username":"admin"},{"$set":{"module":"someothermodule"}})# Sorting users by its username DESC# omitting `filter` returns all recordsdb.users.find(sort={'username':-1})# Pagination of the results# Getting the first 20 recordsdb.users.find(sort={'username':-1},skip=0,limit=20)# Getting next 20 recordsdb.users.find(sort={'username':-1},skip=20,limit=20)# Getting the total of recordsdb.users.count()

自定义存储和序列化程序

HINT: Learn more about TinyDB storages and Serializers in documentation

定制存储

您必须子类化TinyMongoClient,并提供自定义存储,如 cachingmiddleware或其他可用的tinydb扩展。

缓存中间件
fromtinymongoimportTinyMongoClientfromtinydb.storagesimportJSONStoragefromtinydb.middlewaresimportCachingMiddlewareclassCachedClient(TinyMongoClient):"""This client has cache"""@propertydef_storage(self):returnCachingMiddleware(JSONStorage)connection=CachedClient('/path/to/folder')
HINT: You can nest middlewares: ^{tt5}$

序列化程序

要将数据转换为可写入磁盘的格式,tinydb默认使用python json模块。当只涉及简单的数据类型但不能处理更复杂的数据类型(如自定义类)时,这非常好。

要支持复杂类型的序列化,可以编写 使用tinydb-serialization扩展名的您自己的序列化程序。

首先需要安装它pip install tinydb-serialization

处理DateTime对象

您可以使用 以下片段:

fromdatetimeimportdatetimefromtinydb_serializationimportSerializerclassDatetimeSerializer(Serializer):OBJ_CLASS=datetimedef__init__(self,format='%Y-%m-%dT%H:%M:%S',*args,**kwargs):super(DatetimeSerializer,self).__init__(*args,**kwargs)self._format=formatdefencode(self,obj):returnobj.strftime(self._format)defdecode(self,s):returndatetime.strptime(s,self._format)
NOTE: this serializer is available in ^{tt9}$

现在您必须子类TinyMongoClient并提供海关存储。

fromtinymongoimportTinyMongoClientfromtinymongo.serializersimportDateTimeSerializerfromtinydb_serializationimportSerializationMiddlewareclassCustomClient(TinyMongoClient):@propertydef_storage(self):serialization=SerializationMiddleware()serialization.register_serializer(DateTimeSerializer(),'TinyDate')# register other custom serializersreturnserializationconnection=CustomClient('/path/to/folder')

烧瓶管理

此扩展可以与flask admin一起使用,后者提供基于web的管理 为您的TinyDB准备面板。flask管理具有过滤、搜索、web表单等功能 执行tinydb记录的crud(创建、读取、更新、删除)。

您可以在Flask-Admin Examples Repository

NOTE: To use Flask-Admin you need to register a DateTimeSerialization as showed in the previous topic.

贡献

欢迎投稿!目前,最有价值的贡献 将是:

  • 添加测试用例
  • 添加与pymongo一致的功能
  • 文档
  • 识别错误和问题

未来发展

我还将通过对文件进行某种形式的存储并将它们索引到类似于Mango的DB当前的

中来增加对GRIDFs的支持。

接下来还有……

许可证

麻省理工学院许可证

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

推荐PyPI第三方库


热门话题
JavaMaven没有识别junit测试   正则表达式替换Java中字符串中的所有“(“and”)”   文件移动到另一台计算机时出现java错误“实例化servlet类”   服务器上的java服务   Spring数据JPA上的java嵌套@Transactional注释行为   eclipse中的Java Tomcat项目   java在Tomcat上部署web应用程序   如何解决“java.lang.IllegalStateException:ArrayAdapter要求资源ID为TextView”错误?   java在条形码上方添加文本,并使用烧烤更改字体大小   java与php基准测试   java使用正则表达式提取特定模式   java扫描器。findInLine()大量泄漏内存   java HTTP:差异请求属性和POST参数   返回空指针的Java方法?   java验证密码不包含名称中的3个以上连续字符   Java中带泛型的静态多态性   java在Android中获得最后一个已知位置   java为什么Groovy的Map比Array更具可伸缩性?   编码如何在Java中生成八进制字符串?   java Hibernate:使用单例会话写入日志(无刷新)