在正常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的设置脚手架开箱即用。
答案 0 :(得分:4)
如果您正在使用Yesod脚手架,则会提供handler
and db
functions以分别从repl运行处理程序操作和数据库查询:
$ cabal repl
db $ selectList [UserName ==. "foo"] []
修改:我还使用此信息更新了Yesod's wiki page on GHCi。它包含更多示例,并涵盖了一些高级用法,例如使用调试器。