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

Jak*_*old 6 haskell persistent yesod

在正常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
Run Code Online (Sandbox Code Playgroud)

它基本上runSqlPool与应用程序的配置一起使用,但我没有看到如何利用它来访问REPL中的配置表单的简单方法.

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

Max*_*iel 5

如果您使用的是Yesod脚手架,则提供handlerdb功能可让您分别从repl运行处理程序操作和数据库查询:

$ cabal repl

db $ selectList [UserName ==. "foo"] []
Run Code Online (Sandbox Code Playgroud)

编辑:我还使用此信息更新了GHCi上Yesod的Wiki页面。它包括更多示例,并涵盖了一些高级用法,例如使用调试器。