2

我正在尝试使用 Clojure 中的数据库。此时,我想使用Ragtime来修改数据库架构本身,使用Korma来查询和插入数据,并使用H2作为实际的数据库。

我认为我正确使用了它们,但是当我尝试使用 Korma 访问表时出现错误。

这是我的project.clj:

(defproject dbexplore "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [korma "0.4.0"]
                 [com.h2database/h2 "1.4.182"]
                 [ragtime "0.3.7"]]
  :plugins [[ragtime/ragtime.lein "0.3.7"]]
  :ragtime {:migrations ragtime.sql.files/migrations
            :database "jdbc:h2:/home/zck/Documents/dbexplore/resources/db/dbexplore.db"}
  :main dbexplore.core)

所以我要导入 korma、h2database 和 ragtime。我不确定它是否将 Ragtime 迁移指向正确的数据库位置。

我创建了一个迁移文件,内容如下:

create table users (id INT, first varchar(32), last varchar(32));

然后运行它:

zck@zck-desktop:~/Documents/dbexplore$ lein ragtime migrate
Applying 2014-10-22-2-11-create-tables

我制作了一个简单的 core.clj 文件,它只从 users 表中选择所有内容:

(ns dbexplore.core
  (:require [korma.db :as db]
            [korma.core]))

(def db-connection (db/h2 {:db "./resources/db/dbexplore.db"}))

(db/defdb korma-db db-connection)

(korma.core/defentity users)

(defn -main []
  (korma.core/select users))

但是在运行它时lein run,我得到一个错误:

Failure to execute query with SQL:
SELECT "users".* FROM "users"  ::  []
JdbcSQLException:
 Message: Table "users" not found; SQL statement:
SELECT "users".* FROM "users" [42102-182]
 SQLState: 42S02
 Error Code: 42102
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Table "users" not found; SQL statement:
SELECT "users".* FROM "users" [42102-182], compiling:(/tmp/form-init7833348906040195763.clj:1:90)

我的怀疑是我h2在 core.clj 的调用中指向另一个数据库文件,而不是一个 ragtime 正在迁移,但我不确定如何正确指定它。如何让这两个库使用同一个数据库?

4

1 回答 1

0

我在 korma 中创建了一个问题:https
://github.com/korma/Korma/issues/273 也许你想添加一些东西。

我能够使用 yesql 而不是 korma 从 h2 数据库中读取数据。根据不同的线程,应该可以使用 mysql 或 postgresql 代替 h2,但我没有尝试过。

顺便提一句。我已经成功地将 datomic 用于我的最后一个副项目,没有任何这些问题,所以不要放弃,只需尝试不同的设置。

更新请查看链接的错误,维护者发布了两个解决方案,它们都对我有用。

于 2015-01-27T08:30:55.990 回答