如何在REPL中运行Yesod的DB操作?

时间:2015-02-12 21:01:21

标签: haskell yesod persistent

在正常Handler工作流程中运行数据库操作很容易,因为runDB函数可用于将SqlPersistM操作转换为Handler个操作。

但是没有办法使用默认的应用设置将SqlPersistM直接转换为IO。查看应用程序脚手架中定义的Foundation.hs,有以下实例

instance YesodPersist App where
    type YesodPersistBackend App = SqlBackend
    runDB action = do
        master <- getYesod
        runSqlPool action $ appConnPool master
instance YesodPersistRunner App where
    getDBRunner = defaultGetDBRunner appConnPool

基本上使用runSqlPool和app的配置,但是我没有看到如何利用它来访问REPL中的配置表单的简单方法。

TL; DR:我正在寻找的只是能够在我的Yesod应用程序中的cabal repl中执行runDB $ selectList [...] [...]之类的操作,而无需复制Yesod的设置脚手架开箱即用。

1 个答案:

答案 0 :(得分:4)

如果您正在使用Yesod脚手架,则会提供handler and db functions以分别从repl运行处理程序操作和数据库查询:

$ cabal repl

db $ selectList [UserName ==. "foo"] []

修改:我还使用此信息更新了Yesod's wiki page on GHCi。它包含更多示例,并涵盖了一些高级用法,例如使用调试器。