首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >honeysql merge-构建大型查询的地方

honeysql merge-构建大型查询的地方
EN

Stack Overflow用户
提问于 2016-05-15 08:55:40
回答 1查看 228关注 0票数 1

我正在尝试使用honeysql以编程方式构建一个查询,并在执行过程中添加where子句。

来自python并使用sqlalchemy,我可以这样做:

代码语言:javascript
复制
In [3]: query = model.Account.query
In [4]: query = query.filter_by(id=1)
In [5]: query = query.filter_by(email='abc@foo.com')
In [6]: query = query.filter_by(username='someuser')
In [7]: query = query.filter_by(is_active=1)
In [8]: printquery(query)

SELECT *
FROM account
WHERE account.id = 1 AND account.email = 'abc@foo.com' 
      AND account.username = 'someuser' AND account.is_active = 1

但是,使用honeysql时,我的where子句就不那么干净了。

代码语言:javascript
复制
user=> (require '[honeysql.core :as sql])
user=> (require '[honeysql.helpers :refer :all])
user=> (->
  #_=>   (select :*)
  #_=>   (from :test)
  #_=>   (merge-where [:= :a 1])
  #_=>   (merge-where [:= :b 2])
  #_=>   (merge-where [:= :c 3])
  #_=>   (merge-where [:= :d 4])
  #_=>   sql/format)

["SELECT * FROM test WHERE (((a = 1 AND b = 2) AND c = 3) AND d = 4)"]

我意识到它们在逻辑上是一样的,但随着我开始变得越来越复杂,我开始感到紧张,担心我会得到一些微妙的查询,表现得很奇怪,带有额外的括号,这会给我带来问题。

我疯了吗?我是否应该停止担心,学会喜欢额外的花括号(毕竟它是clojure )?或者有没有我不知道的更好的查询构建模式?我是否应该将where子句构建为一个大的向量,并在最后将它们全部添加到查询映射中?

任何建议都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2016-05-15 22:59:35

从逻辑的角度来看

代码语言:javascript
复制
a AND b AND c = ( a AND b ) AND c = a AND ( b AND c ).

其中a,b和c是如下命题

代码语言:javascript
复制
A = 1

AND运算符是关联的,这意味着只要命题的顺序保持不变,括号放在哪里或放多少都无关紧要。

已制定的示例here.

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

https://stackoverflow.com/questions/37233368

复制
相关文章

相似问题

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