跳转到主要内容

Amazon DynamoDB的SQLAlchemy风格ORM

项目描述

Flywheel

构建:

build coverage

文档:

http://flywheel.readthedocs.org/

下载:

http://pypi.python.org/pypi/flywheel

源码:

https://github.com/stevearc/flywheel

Amazon DynamoDB的对象映射器

生命终结警告:自从2014年初以来,我并没有亲自使用过这个项目,甚至很少写Python代码。我会继续响应错误和拉取请求,但我不再进行积极开发。对于依赖Flywheel的各位,我感到非常抱歉;我希望我有时间继续它。如果社区中有人有兴趣成为新的维护者并继续推动开发,请给我发送电子邮件,我们可以讨论。

如果您在寻找替代方案,我可以推荐 PynamoDB

入门

这是一个基本模型的样子(模式取自此 DynamoDB API文档

from flywheel import Model, Field, GlobalIndex

class GameScore(Model):
    __metadata__ = {
        'global_indexes': [
            GlobalIndex('GameTitleIndex', 'title', 'top_score')
        ],
    }
    userid = Field(hash_key=True)
    title = Field(range_key=True)
    top_score = Field(type=int)
    top_score_time = Field(type=datetime)
    wins = Field(type=int)
    losses = Field(type=int)

    def __init__(self, title, userid):
        self.title = title
        self.userid = userid

创建一个新的最高分

>>> score = GameScore('Master Blaster', 'abc')
>>> score.top_score = 9001
>>> score.top_score_time = datetime.utcnow()
>>> engine.sync(score)

获取用户的全部最高分

>>> scores = engine.query(GameScore).filter(userid='abc').all()

获取Galaxy Invaders的最高分

>>> top_score = engine.query(GameScore).filter(title='Galaxy Invaders')\
...     .first(desc=True)

在Alien Adventure上原子地增加用户的“胜利”次数

>>> score = GameScore('Alien Adventure', 'abc')
>>> score.incr_(wins=1)
>>> engine.sync(score)

获取Comet Quest上所有超过9000分的分数

>>> scores = engine.query(GameScore).filter(GameScore.top_score > 9000,
...                                         title='Comet Quest').all()

变更日志

0.5.4

  • dynamo3 依赖项的版本限制为避免冲突

0.5.3

  • 错误修复:修复使用自定义类型主键时的刷新问题

0.5.2

  • 错误修复:修改限制行为以匹配文档。 query().limit() 将限制结果数量,query().scan_limit() 将限制扫描的项目数量

0.5.1

  • 新功能:为 Engine 添加 update_schema() 方法

0.5.0

  • 破坏性变更:移除对溢出字段的支持。Flywheel 现在只关注那些显式设置为 Field() 的字段

  • Flywheel 在您同步属于复合字段的字段更改时不再强制将 raise_on_conflict 设置为 True。现在由用户负责避免将复合字段置于不一致的状态。

  • 新功能:sync() 新增 no_read 参数,更改同步无更改的模型的行性行为。它将不再执行 GET 操作,而是保持原样。这应该可以更容易地进行批量同步,而无需过多担心 GET 操作的带宽浪费。

  • Fielddata_type 参数重命名为 typedata_type 仍然有效)

0.4.11

  • 错误修复:布尔溢出字段不再解码为十进制

0.4.10

  • 新功能:为 Engine 添加 exists() 方法

0.4.9

  • 新功能:为 Models 添加 save() 方法

  • 新功能:为 Engine 添加 update_field() 方法

0.4.8

  • 错误修复:在 index_pk_dict_ 中的错误函数调用

0.4.7

  • index_pk_dict_ 方法用于构建索引查询的 exclusive_start_key

0.4.6

  • 将 exclusive_start_key 传递给 dynamo3

0.4.5

  • 错误修复:有时从无序结果中调用 refresh() 可能会崩溃。

0.4.4

  • 错误修复:可变字段的默认值不再在模型实例之间共享

0.4.3

  • 错误修复:同步复合字段更改时出现不正确的 ConditionalCheckFailedException

  • 允许 DateTimeType 作为无时区的时间存储

0.4.2

  • 使 dictlistbool 类型向后兼容旧的 json-序列化格式

  • 允许查询使用 innot null 和一些缺失的其他约束

  • 模型在标记字段为脏以同步方面变得更加智能

  • 停止使用过时的 dynamo3 expected 语法

0.4.1

  • 警告:存储的 datetime 对象现在将具有时区感知性

  • 警告:存储的 datetime 对象现在将保留其微秒数

0.4.0

  • 破坏性变更:由于 botocore 不支持,移除对 python 3.2 的支持

  • 破坏性变更:将 listdictbool 数据类型更改为使用原生 DynamoDB 类型,而不是 JSON 序列化

  • 破坏性变更 和错误修复:修复 datetimedate 对象的序列化(有关更多信息,请参阅提交)

  • 新功能:现在可以对列表执行“包含”过滤器

  • 新功能:字段支持多个验证检查

  • 新功能:字段有简单的方式来强制执行非空值(nullable=False

数据类型更改是由于 DynamoDB API 的更新 而产生的

0.3.0

  • 破坏性变更:Engine 命名空间略有不同。如果传入字符串,它将用作表名前缀,不会添加额外的‘-’。

0.2.1

  • 破坏性变更:某些查询现在可能需要您指定之前自动检测到的索引

  • 特性:查询现在可以过滤非索引字段

  • 特性:更强大的“同步-if”约束

  • 特性:可以在查询中组合使用 OR 过滤约束

所有更改均由 DynamoDB API 的更新引起

0.2.0

  • 破坏性变更:引擎不再接受 boto 连接(使用 dynamo3 代替)

  • 破坏性变更:移除 S3Type(不再有 boto 依赖项)

  • 特性:支持 Python 3.2 和 3.3

  • 特性:查询的 .count() 终止符

  • 特性:可以在 Engine.create_schema() 中覆盖吞吐量

  • 错误修复:引擎 namespace 实际上是隔离的

0.1.3

  • 错误修复:当全局索引没有范围键时,某些查询会失败

0.1.2

  • 错误修复:字段名称可以以下划线开头

  • 特性:模型具有友好的默认 __init__ 方法

0.1.1

  • 错误修复:可以在尚未保存的模型上调用 incr_()

  • 错误修复:使用 None 进行模型比较

0.1.0

  • 首次公开发布

项目详情


下载文件

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

源分布

flywheel-0.5.4.tar.gz (32.0 kB 查看哈希值)

上传时间

构建分布

flywheel-0.5.4-py2.py3-none-any.whl (33.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者:

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