跳转到主要内容

SQLAlchemy分层键/值助手

项目描述

metalchemy:SQLAlchemy分层键/值助手

metalchemy包为您的SQLAlchemy模型提供助手,以添加动态属性。

https://api.travis-ci.org/paylogic/metalchemy.png https://pypip.in/v/metalchemy/badge.png https://coveralls.io/repos/paylogic/metalchemy/badge.png?branch=master

安装

pip install metalchemy

用法

metalchemy用法示例

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

import metalchemy

metalchemy_attributes = metalchemy.initialize(Base)

Session = sessionmaker(bind=engine)
sess = Session()

class MyModel(Base)

    meta = metalchemy_attributes.Metadata()


my_object = MyModel()
my_object.meta.some.value = 'some value'
sess.add(my_object)
sess.commit()

sess.refresh(my_object)
assert  my_object.meta.some.value.get_value() == 'some value'

为了给一个类添加元数据功能,请向它添加一个属性,该属性是的一个实例。

class HasMetadata(object):
    meta = metadata.Metadata()

此类的任何实例现在都可以通过meta属性访问其元数据。

此类元属性允许自由读取和分配属性,没有属性深度的限制。例如,meta.foo始终可用于读取和写入,也可以是meta.foo.bar.baz,无需事先设置。

分配元数据属性简单明了

inst.meta.foo = 42
inst.meta.foo.bar.baz = 'qux'

任何元数据属性也隐式地是一个数组。可以从中分配和读取任何索引

inst.meta.foo[0] = 42
inst.meta.foo[1] = 'baz'
inst.meta.foo[1].bar = 'qux'
inst.meta.foo[1].spam[2] = 'eggs'
inst.meta.foo[1][2] = 'xyzzy'

任何非索引属性隐式转换为零索引。

所有元数据值在赋值时都转换为Unicode字符串。赋值后的值会自动添加到SQLAlchemy会话中,但不会提交,所以请记得执行session.commit()。此外,还支持FieldWrapper.appendFieldWrapper.iteritemsFieldWrapper.__iter__方法进行直接迭代。

读取值需要使用get_value方法

inst.meta.foo.get_value()  # returns 42
inst.meta.foo.bar.baz.get_value()  # returns u'qux'

内部结构:字段的层次结构存储在一个邻接表中(由_Fields表示),这是针对单个类的,一个类的所有实例共享这个相同的树。一个_Object将类名映射到这个树,并在需要时一次性加载整个树。

分配给容器类的Metadata实例在访问时会加载_Object(以及隐式地,字段层次结构),并返回一个包装的根节点。

FieldWrappers包装每个_Field,执行两个功能:- 允许访问尚未有具体_Field实例的字段,并在需要时创建这些实例 - 实际访问特定容器类实例的值列表。

值存储在一个扁平列表中,在第一次需要时,会完全加载容器类实例。

数组支持通过两种状态的FieldWrappers来处理:常规和索引。

常规包装器包装未索引的属性。它在其属性上处理数组的读写操作(FieldWrapper.__getitem__FieldWrapper.__setitem__),并将属性访问推迟到其自己的零索引。

索引包装器包装索引属性。此包装器通过返回该子属性的包装器来处理属性访问。索引包装器也可以被索引,但这是通过将二级索引推迟到隐藏的子属性内部来完成的。例如,访问meta.foo[0][1][2]在内部被处理为访问meta.foo[0].hidden[1].hidden[2]

联系

如果您有任何问题、错误报告、建议等,请在GitHub项目页面上创建一个问题。

许可

本软件根据MIT许可证授权。

查看许可证

© 2014 Paylogic International.

更改日志

1.0.0

  • 首次公开发布

项目详情


下载文件

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

源分布

metalchemy-1.0.0.tar.gz (10.4 kB 查看散列)

上传时间

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面