跳转到主要内容

redis-limpyd的一些扩展,它是一个Python中的redis ORM(类似)。

项目描述

PyPI Version Build Status

redis-limpyd-extensions

redis-limpyd (redis orm (类似)在Python中)提供一些扩展

在哪里找到它

安装

支持Python版本2.7,以及3.5到3.8(CPython和PyPy)。

支持Redis-server版本 >= 3。

支持Redis-py版本 >= 3。

支持Redis-limpyd版本 >= 2。

如果您需要低于上述要求的旧版本,仍然可以使用limpyd-extensions版本 < 2。

pip install redis-limpyd-extensions

可用的扩展列表

  • 在两侧添加/删除相关项

  • 动态字段

动态字段

动态字段提供了一种通过定义一个(或多个)动态字段来向模型添加无限字段的方法,并使用动态部分来使用它。例如,动态字段名“foo”可以与您想要的任何动态部分一起使用来创建动态变体:“foo_bar”用于动态部分“bar”,“foo_baz”用于动态部分“baz”,依此类推。

提供了一个简单的 API 来使用它们以及根据它们进行过滤。

要使用动态字段,您的模型必须继承以下 mixin:位于 limpyd_extensions.dynamic.model 中的 ModelWithDynamicFieldMixin。它是一个 mixin,您应该与另一个 RedisModel 类一起使用。字段作为字段类(DynamicStringFieldDynamicInstanceHashFieldDynamicListFieldDynamicSetFieldDynamicSortedSetFieldDynamicHashField)或作为 mixin(DynamicFieldMixin)使用,如果您想适应外部字段。您可以在 limpyd_extensions.dynamic.fields 中找到它们。

如何在模型上定义动态字段的简短示例

from limpyd.model import RedisModel

from limpyd_extension.dynamic.model import ModelWithDynamicFieldMixin
from limpyd_extension.dynamic.fields import DynamicSetField


class MyModel(ModelWithDynamicFieldMixin, RedisModel):
    foo = DynamicSetField(indexable=True)

由于 foo 字段是动态的,您不能对其运行任何命令,而只能对其动态变体进行操作。如何做到这一点?

有两种方法

  • 使用模型的 get_field 方法

foo_bar = myinstance.get_field('foo_bar')
  • 使用字段的 get_for 方法

foo_bar = myinstance.foo.get_for('bar')

后者在您有一个变量而不是已知值时很有用

somebar = 'bar'
foo_bar = myinstance.foo.get_for(somevar)

请注意,您可以使用此快捷方式代替使用 get_for

foo_bar = myinstance.foo(somevar)

了解这一点后,您可以对这些字段进行操作

myinstance.foo(somevar).sadd('one', 'two', 'three')
myinstance.foo(othervar).sadd('four', 'five')
myotherinstance.foo(somevar).sadd('three', 'thirty')
print myinstance.foo(somevar).smembers()
print myinstance.foo(othervar).smembers()
print myotherinstance.foo(somevar).smembers()

要了解动态_field 中的现有版本,您可以使用 scan_fields

它与 SetField(来自 limpyd)的 sscan 命令使用相同的参数,因为它应用于保存所有版本的库存键。

因此,如果您有一些版本

您可以检索全部

或者部分

过滤

要在可索引的动态字段上过滤,也有两种方法

  • 使用经典方式,如果您事先知道动态部分

MyModel.collection(foo_bar='three')
  • 使用新的 dynamic_filter 方法

MyModel.collection().dynamic_filter('foo', 'bar', 'three')

参数包括:字段名称、动态部分、过滤值,以及在上一个示例中没有显示的索引后缀。

此后缀默认为空。

但如果你想做的

MyModel.collection(foo_bar__eq='three')

您可以使用 dynamic_filter 这样做

MyModel.collection().dynamic_filter('foo', 'bar', 'three', 'eq')  # you can use '__eq' too

ModelWithDynamicFieldMixin 一起使用的集合管理器依赖于 ExtendedCollectionManager,因此您可以在结果集合上链式调用过滤和动态过滤。

提供类

以下是 limpyd_extensions.dynamic 模块提供的模块和类的列表

  • 模型

    • 混合

      • ModelWithDynamicFieldMixin(object) - 用于具有动态字段的模型的混合

  • 集合

    • 混合

      • CollectionManagerForModelWithDynamicFieldMixin(object) - 如果您想要将自己的动态过滤方法添加到自己的集合管理器中,请使用此混合

    • 完整类

      • CollectionManagerForModelWithDynamicField(CollectionManagerForModelWithDynamicFieldMixin, ExtendedCollectionManager) - 从我们的混合和 limpyd.contrib.collection 的管理器中继承的简单类

  • 字段

    • 混合

      • DynamicFieldMixin(object) - 在所有关于动态字段的工作完成后,用于将动态字段支持添加到您自己的字段中的混合

    • 完整类 所有字段简单地继承自我们的混合和所需的基字段,不再添加其他内容

      • DynamicStringField(DynamicFieldMixin, StringField)

      • DynamicInstanceHashField(DynamicFieldMixin, InstanceHashField)

      • DynamicListField(DynamicFieldMixin, ListField)

      • DynamicSetField(DynamicFieldMixin, SetField)

      • DynamicSortedSetField(DynamicFieldMixin, SortedSetField)

      • DynamicHashField(DynamicFieldMixin, HashField)

  • 相关

    • 混合

      • DynamicRelatedFieldMixin(DynamicFieldMixin) - 在所有关于动态相关字段的工作完成后,用于将动态字段支持添加到您自己的相关字段中的混合

    • 完整类

      • DynamicFKStringField(DynamicRelatedFieldMixin, FKStringField)

      • DynamicFKInstanceHashField(DynamicRelatedFieldMixin, FKInstanceHashField)

      • DynamicM2MSetField(DynamicRelatedFieldMixin, M2MSetField)

      • DynamicM2MListField(DynamicRelatedFieldMixin, M2MListField)

      • DynamicM2MSortedSetField(DynamicRelatedFieldMixin, M2MSortedSetField)

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源代码分发

redis-limpyd-extensions-2.1.tar.gz (17.0 kB 查看哈希值)

上传时间 源代码

构建分发

redis_limpyd_extensions-2.1-py2.py3-none-any.whl (14.4 kB 查看哈希值)

上传时间 Python 2 Python 3