在 Clojure 中,如何配置 Korma 和 Ragtime 以使用相同的数据库?
Posted
技术标签:
【中文标题】在 Clojure 中,如何配置 Korma 和 Ragtime 以使用相同的数据库?【英文标题】:In Clojure, how do I configure Korma and Ragtime to use the same database? 【发布时间】:2014-10-24 06:35:42 【问题描述】:我正在尝试使用 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 文件,它只从用户表中选择所有内容:
(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)
我的怀疑是我在 core.clj 中的h2
调用中指向另一个数据库文件,来自一个 ragtime 正在迁移,但我不确定如何正确指定它。如何让这两个库使用同一个数据库?
【问题讨论】:
您好,您找到解决方案了吗?我遇到了同样的问题,我通过一些不同的 sql 客户端确保该表存在。 @sveri 我没有,所以我停止尝试。我已经(暂时)放弃了尝试将数据库与 Clojure 一起使用。 【参考方案1】:我在 korma 中创建了一个问题:https://github.com/korma/Korma/issues/273 也许你想添加一些东西。
我能够使用 yesql 而不是 korma 从 h2 数据库中读取数据。根据不同的线程应该可以用mysql或者postgresql代替h2,但是我没试过。
顺便说一句。我已经成功地将 datomic 用于我的最后一个副项目,没有任何这些问题,所以不要放弃,尝试不同的设置。
更新请查看链接的错误,维护者发布了两个解决方案,它们都对我有用。
【讨论】:
以上是关于在 Clojure 中,如何配置 Korma 和 Ragtime 以使用相同的数据库?的主要内容,如果未能解决你的问题,请参考以下文章
使用 clojure 的 korma sqlite3 助手时,sqlite3 数据库的默认路径是啥?
如何使用 korma 在 postgresql 上插入 clj-time 日期时间对象