使用存储库模式和服务模式与数据库通信
dbdaora的Python项目详细描述
德布拉
使用存储库和服务模式以及python数据类与NoSQL数据库通信(对于未来,还有SQL)数据库 在
文档:https://dutradda.github.io/dbdaora/
源代码:https://github.com/dutradda/dbdaora
主要特点
- 在
创建带有缓存和断路器的可选服务层
在 - 在
支持redis数据类型:
- 散列
- 排序集
- (其他数据类型已计划)
- 在
将redis数据备份到其他数据库:
- 谷歌数据存储
- Mongodb(很快)
- 使用SQLAlchemy的SQL数据库(很快)
- (其他数据库计划中)
- 在
正在开发对其他数据库的支持。
在
要求
- 在
Python 3.8+
在 - 在
jsondaora用于数据验证/分析
在 - 在
断路器
在 - 在
缓存工具
在 - 在
可选:
- 艾奥雷迪斯
- 谷歌云数据存储
安装
$ pip install dbdaora
简单的redis哈希示例
^{pr2}$Person(id='john_doe', name='John Doe', age=33)
简单redis排序集示例
importasynciofromdbdaoraimport(DictFallbackDataSource,DictMemoryDataSource,SortedSetEntity,SortedSetRepository,)classPlaylist(SortedSetEntity):id:strclassPlaylistRepository(SortedSetRepository[Playlist,str]):...repository=PlaylistRepository(memory_data_source=DictMemoryDataSource(),fallback_data_source=DictFallbackDataSource(),expire_time=60,)data=[('m1',1),('m2',2),('m3',3)]playlist=Playlist(id='my_plalist',data=data)asyncio.run(repository.add(playlist))geted_playlist=asyncio.run(repository.query(playlist.id).entity)print(geted_playlist)
Playlist(id='my_plalist',data=[b'm1',b'm2',b'm3'],max_size=None)
使用服务层
服务层在redis离线时使用备份数据集,打开断路器。在
它也有一个可选的缓存系统。在
importasynciofromdataclassesimportdataclassfromdbdaoraimport(DictFallbackDataSource,DictMemoryDataSource,HashRepository,make_hash_service,)@dataclassclassPerson:id:strname:strage:intdefmake_person(name:str,age:int)->Person:returnPerson(name.replace(' ','_').lower(),name,age)classPersonRepository(HashRepository[Person,str]):...asyncdefmake_memory_data_source()->DictMemoryDataSource:returnDictMemoryDataSource()asyncdefmake_fallback_data_source()->DictFallbackDataSource:returnDictFallbackDataSource()service=asyncio.run(make_hash_service(PersonRepository,memory_data_source_factory=make_memory_data_source,fallback_data_source_factory=make_fallback_data_source,repository_expire_time=60,))person=make_person('John Doe',33)asyncio.run(service.add(person))geted_person=asyncio.run(service.get_one(person.id))print(geted_person)
Person(id='john_doe',name='John Doe',age=33)
- 项目
标签: