python - 复杂查询的设计模式

标签 python sql design-patterns

我们目前正在开发一个大量使用 PostgreSQL 的应用程序。大多数情况下,我们使用 SQLAlchemy 访问数据库,这非常有效。为了测试相关对象,可以模拟,或者在没有数据库访问权限的情况下使用。但是系统的某些部分运行非标准查询。这些子系统必须创建临时表,插入大量行,然后将数据合并回主表。

目前这些子系统中有一些SQL语句,但这使得相关的类与数据库紧密耦合,进而使单元测试变得更加困难。

基本上我的问题是,是否有解决此问题的设计模式?我唯一能想到的就是将这些 SQL 语句放入一个单独的类中,然后将一个实例传递给另一个类。这样我就可以为单元测试模拟query-class,但感觉还是有点笨拙。有更好的方法吗?

最佳答案

所以在尝试了更多之后,我现在有了一个还算不错的解决方案。我将有问题的类(class)分成三个独立的类(class):

  • 提供对所需数据的访问的类;
  • 支持临时表内容的上下文管理器;
  • 以及具有所有逻辑的旧类(没有数据库的东西);

当我实例化我的逻辑类时,我为它提供了上述类的一个实例。它工作正常,抽象有点漏洞(尤其是上下文管理器),但我现在至少可以正确地对逻辑进行单元测试。

关于python - 复杂查询的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999676/

相关文章:

python - 我应该使用 numpy.polyfit 还是 numpy.polynomial.polyfit 或 numpy.polynomial.polynomial.Polynomial?

python - 无论 python 中的键名如何,按值对字典列表进行排序

php - 用于获取用户队列的 SQL - 对于游戏

java - REST 资源类中封装错误处理的良好模式或风格是什么?

algorithm - 2D PHP Pattern Creator 算法

python - 在 python 中安装 ggplot 时出错

python - 使用 nltk pos 标记器标记单个单词而不是单词标记每个字母

mysql - 如何结合以下两个查询

mysql - MYSQL中如何判断两个日期之间的年月差?

design-patterns - 原则 2 中的代理人是什么?