用于PofEAA存储库模式的辅助工具
项目描述
rebecca.repository
用于SQLAlchemy的存储库模式的实现。
入门指南
使用pip安装
$ pip install rebecca.repository
SQLAlchemy的存储库
基本存储库
通过SQLAlchemy实现您的模型
from sqlalchemy import Column, Integer, Unicode from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() DBSession = scoped_session(sessionmaker()) class Person(Base): __tablename__ = "person" id = Column(Integer, primary_key=True) name = Column(Unicode(255)) age = Column(Integer, default=0) job = Column(Unicode(255))
获取存储库
from rebecca.repository.sqla import SQLARepository person_repository = SQALRepository(Person, Person.id, DBSession())
此存储库用于Person模型。要获取人员,请使用Person.id作为键。
条件存储库
存储库可以配置以设置条件
person_repository = SQALRepository(Person, Person.id, DBSession(), condition=Person.age>30)
存储库工厂
如果在请求时间传递参数,请使用工厂。
class JobPersonRepository(SQLARepository): def __init__(self, db_session, job): super(JobPersonRepository, self).__init__(Person, Person.id, dbsession, condition=Person.job==job)
参数job将来自请求属性。
要注册存储库工厂,请添加add_repository_factory
指令
config.add_repository_factory(JobPersonRepository, "job-person", args=(DBSession,))
或使用repository_factory_config
装饰器
@repository_factory_config("job-person", args=(DBSession,)) class JobPersonRepository(SQLARepository): ....
要从注册的工厂创建存储库,请调用create_repository
API
job = request.matchdict["job"] repository = create_repository("person", args=(job,))
文件系统的存储库
rebecca.repository.fs.FileSystemRepository是文件系统的存储库
>>> repository = FileSystemRepository(directory="/path/to/data") >>> item = repository.new_item("new-item") >>> item.data = b"testing-binary-data" >>> import transaction >>> transaction.commit()
FileSystemRepository.new_item是创建新的文件系统条目。 item.data是保存到文件的二进制数据。这与transaction 具有事务性。
存储库接口
创建演示对象
person1 = Person(name=u"person1") DBSession.add(person1) DBSession.flush() # to generate person.id
存储库具有类似于字典的接口
person_repository[person.id] person_repository.get(person.id)
以及实用方法
person_repository.get_many([1, 2, 3]) new_person = person_repository.new_item()
Pyramid集成
rebecca.repository为Pyramid注册提供了指令
config.include('rebecca.repository') config.add_repository(person_repository, 'person')
或使用repository_config
装饰器
@repository_config(name="person", args=(DBSession,)) class PersonRepository(SQLARepository): def __init__(self, dbsession): super(PersonRepository, self).__init__(Person, Person.id, dbsession)
要获取已注册的存储库,请使用get_repository
get_repository(request, 'person')
贡献者
Atsushi Odagiri,原作者
变更日志
0.4 (2013-09-22)
文件存储库(尚未)
0.3 (2013-08-29)
添加了存储库工厂API
添加了get_many方法
0.2 (2013-08-25)
添加了金字塔配置指令和金星装饰器
0.1.1 (2013-08-24)
修复了打包错误
0.1 (2013-08-24)
第一个版本
项目详情
关闭
rebecca.repository-0.4.zip的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b50a1e1f08c6220f78fd3dd00024a6ed802993c23e141fc4859d0aed2d23b48b |
|
MD5 | c265ee4ae82b85b177bee560aba738e4 |
|
BLAKE2b-256 | 111b13e4b2bb993f5c4ebc2e054b0c799433238dcb1a1aedeacfa4e43b640427 |
关闭
rebecca.repository-0.4-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5f17f9d561dbfd674a1bad72e367de5ae1719061bb4f8ab886d40f37a24e6488 |
|
MD5 | bbb57efc8fa3060d69f09dcd49341b38 |
|
BLAKE2b-256 | 482b83477fd74c641d8619038f3c168b63fa7025be9ef9ff43a30b2e2e29caea |