如何访问korma中其他模式中的表?

时间:2014-11-07 03:14:13

标签: clojure korma sqlkorma

在SQL中,访问其他模式中的表很简单:

select * 
from other_schema.t
where ...

我怎么能在科尔马这样做?我实际要做的是访问information_schema.tables表。因此,按db定义另一个defdb并不会有所帮助。

我试图定义实体,但失败了。

(defentity information_schema.tables)

2 个答案:

答案 0 :(得分:2)

我必须知道在定义实体时有一种方法可以指定基表。指定基表时,它允许使用.设置架构。

(defentity tables
  (table :information_schema.tables))

这适用于访问information_schema.tables表,而无需定义另一个数据库。

答案 1 :(得分:0)

您应该可以通过定义另一个db来完成此操作。我可以像这样创建一个db:

CREATE database my_db;
USE my_db;
CREATE TABLE stuff (
  things VARCHAR(255)
);
INSERT INTO stuff (things) VALUES ("some things");

现在我定义两个Korma数据库和实体,并查询它们:

(defdb my-db (mysql {:host "localhost" 
                     :port 3306 
                     :db "my_db"
                     :user "root"
                     :password nil}))

(defdb information-schema (mysql {:host "localhost" 
                                  :port 3306 
                                  :db "information_schema" 
                                  :user "root" 
                                  :password nil}))


(defentity stuff)

(defentity information-schema)

(select stuff
        (database my-db))

;; => ({:things "some things"})

(select TABLES 
        (database information-schema) 
        (fields :TABLE_SCHEMA :TABLE_NAME) 
        (where {:TABLE_SCHEMA "my_db"}))

;; => ({:TABLE_NAME "stuff", :TABLE_SCHEMA "my_db"})