首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与PonyORM接口的问题

与PonyORM接口的问题
EN

Stack Overflow用户
提问于 2018-03-22 01:26:13
回答 1查看 99关注 0票数 1

我发现Pony是一个用于小项目的很好的orm。然而,当你的项目超过某个点时,对于编写的每个函数来说,在函数中放置@db_session几乎是必须的。

遵循可靠的原则,我正在尝试连接PonyORM。然而,事实证明这并不像我想象的那么容易。

代码语言:javascript
复制
class CustomQuery(object):
    def __init__(self, query):
        self.obj = query

    def __getattr__(self, attr):
        return getattr(self.obj, attr)

    @db_session
    def count(self):
        return self.obj.count()

    @db_session
    def first(self):
        return self.obj.first()

    @db_session
    def without_distinct(self):
        return self.obj.without_distinct()

    def __iter__(self):
        return self.obj.__iter__()


class DatabaseService:

    @staticmethod
    @db_session
    def select(*args):
       # This will be select() interface
        return CustomQuery(select(*args))

这是我正在尝试做的一个例子。然而,当我做一些事情时,我会遇到一些问题:

代码语言:javascript
复制
# User has many PhoneNumbers

user = User.select().first() 

assert isInstance(user, CustomQuery)

user.phone_numbers.count()

如果我理解正确的话,在执行user.phone_numbers.count()时会创建一个新的pony.orm.core.Query对象。

相反,我希望返回一个CustomQuery对象,这将允许db_session持久化。

对如何做到这一点有什么想法吗?或者其他人处理@db_session装饰器乱七八糟的方式?

EN

回答 1

Stack Overflow用户

发布于 2020-11-19 18:03:54

首先,在我看来,您是在试图与Pony的设计理念背道而驰:@db_session装饰器的整个想法是将您从处理数据库管理(样板代码、打开/关闭数据库、SQL、回滚等)中解脱出来。我知道你想自己做这件事,因此把@db_session的想法渲染得毫无意义

其次,本质上,除非装饰器在调用时有副作用,否则它只是一个以调用开始和结束的包装器。因此,让它持续存在的想法也与其预期目标背道而驰。

总而言之,如果你想做pony为你提供的工具的工作,你最好干脆放弃使用pony。

也许,你应该问问你自己,为什么你想要小马,为什么你想摆脱装饰者。下定决心会帮助你做出正确的决定。

HTH

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49412916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档