【问题标题】:Working with SQL in Clojure/Luminus/Composure在 Clojure/Luminus/Composure 中使用 SQL
【发布时间】:2016-09-22 17:00:55
【问题描述】:

1) 我有一个 luminus 应用程序。我想在单个数据库连接中执行多个数据库请求,这意味着不必再次打开连接。 现在我有了这个:

(defn page1 [id]
  (layout/render "page1.html"
    (my-var1 (db/get-single-article {:id (Integer/parseInt id)}))))

我想在执行 db/get-single-article 的同一数据库连接中执行其他操作,例如 db/get-something-else。怎么样?

2) 在 resources/sql/queries.sql 我有这个:

-- :name get-single-article :? :1
-- :doc retrieve an article given the id.
SELECT * FROM article
WHERE id = :id

如何向其中添加一个查询,以便它在 db/get-single-article 调用中执行并返回不同的结果集?像这样:

-- :name get-single-article :? :1
-- :doc retrieve an article given the id.
SELECT * FROM article
WHERE id = :id

select * from another_table
where ...

那么在调用 db/get-single-article 时如何导航它们?

【问题讨论】:

    标签: sql clojure compojure luminus


    【解决方案1】:

    继续在您的 SQL 文件中定义第二个查询:

    -- :name get-something-else :? :*
    select * from another_table where ...
    

    然后为这两个查询分配查询结果,如下所示:

    (defn page1 [id]
      (layout/render "page1.html"
        {:my-var1 (db/get-single-article {:id (Integer/parseInt id)})
         :my-var2 (db/get-something-else)}))
    

    【讨论】:

    • 但这将是 2 个不同的查询。我想要 1 也返回 2 个结果集。
    • 这不是它的工作原理。一个查询 = 一个结果集。如果你想创建一个单独的包装函数来调用两个 db 函数并返回它们,你可以。
    • JDBC。数据库一般。您是否将此行为与导致混淆的行为进行比较?
    • 其他一切。所有数据库都支持这一点。那么为什么这里不支持它,你确定吗?
    • 欢迎您深入研究各种 JDBC 驱动程序的内部结构,您会发现.getMoreResults 的多结果集支持通常不受支持或有警告。对于极少数数据库,例如 MS SQL Server,您可能对this example retrieving multiple result sets with clojure.java.jdbc 感兴趣
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多