【问题标题】:The pythonic way to handle sqlalchemy models处理 sqlalchemy 模型的 Pythonic 方式
【发布时间】:2012-05-15 01:58:43
【问题描述】:

我正在使用 sqlalchemy,并且通过使用 ruby​​/rails activerecord 和 datamapper 学习了一个 orm,它有点不同。

所以,有一些模型并且需要我认为的类和实例级别的方法,我看到 python 没有这样做,或者我到目前为止所理解的 python 级别没有这样做。为模型构建新方法的pythonic方法是什么:装饰器、制作模块和导入方法等?我需要各种各样的东西,所以没有具体的编码问题,只是一个一般性的请求,要求指导如何有效地使用 sqlalchemy 处理模型,其中需要处理模型特定的方法。

注意:这不是讨论语言细节的邀请,我只提及我到目前为止所学到的知识以及如何将其应用于新情况。

【问题讨论】:

  • 呃,Python 确实有类方法和实例方法。您到底在寻找什么?
  • 在指出我可能错过或找不到的教程或代码示例方面的指导。我仍然处于主要是 rtfm 的中间,并认为我至少会要求获得一些指示。
  • 使用声明性方法完成了一些基本设置,添加了一些刚刚通过的方法,在 SQa 文档和教程和命令行之间进行了大量阅读——在基本项目中学习的东西。我的问题只是为了获得更多意见。

标签: sqlalchemy python


【解决方案1】:

您可以将模型方法作为模型定义上的类方法。例如:

class User(object):

    @classmethod
    def get_by_username(cls, dbsession, username):
        return dbsession.query(cls).filter(cls.username==username).scalar()

mapper(User, tables.auth_user,
    properties={
        ...
        }
    )

允许您将类用作表特定方法的容器。像这样:

user = User.get_by_username(session, "me")

【讨论】:

  • 这与我还没有做的差不多;基本上得到正确的查询,然后用一个简洁的模型接口包装它们。
  • 这是一个有用的例子,我想把它变成一个'get_by_*'函数过滤器,以防止为模型写100次(仅作为示例并期待)
猜你喜欢
  • 2013-04-25
  • 2013-12-13
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 2014-05-23
  • 1970-01-01
相关资源
最近更新 更多