使用存储库模式和服务模式与数据库通信

dbdaora的Python项目详细描述


德布拉

dbdaora

使用存储库和服务模式以及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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java ParsePushReceiver参数   java如何从设备读取完整数据?   java将java_设置为home,但忽略错误   java如何从歌曲中对专辑进行排序?   java libnaude+windows 10 x64+Eclipse   java如何将maven目标更改为如图所示的想法中的quickicon?   java swing布局中心面板,可滚动显示多个窗口窗格   使用MOSQUITO代理的mqtt中的java SSL   java如何通过属性值获取XML字符串   java在服务器每次启动时停止GWT编译   java如何让javac搜索类路径的子目录?   可以比较java中的两个不同类吗?   JAVAAndroid活动内部类中的lang.NoClassDefFoundError   java HttpServletRequest获取请求头参数块   C++socket与java客户端的连接   java如何在Apache commons http客户端上使用SSL客户端证书   使用预编译正则表达式模式提高java速度   JavaRhino将两个已编译脚本合并为一个脚本