Amazon DynamoDB的SQLAlchemy风格ORM
项目描述
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 操作的带宽浪费。
Field 将 data_type 参数重命名为 type(data_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
使 dict、list 和 bool 类型向后兼容旧的 json-序列化格式
允许查询使用 in、not null 和一些缺失的其他约束
模型在标记字段为脏以同步方面变得更加智能
停止使用过时的 dynamo3 expected 语法
0.4.1
警告:存储的 datetime 对象现在将具有时区感知性
警告:存储的 datetime 对象现在将保留其微秒数
0.4.0
破坏性变更:由于 botocore 不支持,移除对 python 3.2 的支持
破坏性变更:将 list、dict 和 bool 数据类型更改为使用原生 DynamoDB 类型,而不是 JSON 序列化
破坏性变更 和错误修复:修复 datetime 和 date 对象的序列化(有关更多信息,请参阅提交)
新功能:现在可以对列表执行“包含”过滤器
新功能:字段支持多个验证检查
新功能:字段有简单的方式来强制执行非空值(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
首次公开发布
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。