如何在 REPL 中运行 Yesod 的数据库操作?
Posted
技术标签:
【中文标题】如何在 REPL 中运行 Yesod 的数据库操作?【英文标题】:How can I run Yesod's DB actions in the REPL? 【发布时间】:2015-02-12 21:01:20 【问题描述】:在正常的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
与应用程序的配置一起使用,但我看不到如何利用它来访问 REPL 中的配置表单的简单方法。
TL;DR:我正在寻找的只是能够在我的 Yesod 应用程序中的 cabal repl 中执行 runDB $ selectList [...] [...]
之类的操作,而无需复制 Yesod 脚手架所做的设置开箱即用。
【问题讨论】:
澄清一下,您使用的是yesod脚手架吗?如果是这样,您可以使用these functions 运行处理程序操作和数据库查询。用法示例:db $ selectList [UserName ==. "foo"] []
@MaxGabriel 我建议将该评论作为答案,它很好地展示了如何实现 Jakub 的目标。
好电话@MichaelSnoyman
【参考方案1】:
如果您使用 Yesod 脚手架,则提供 handler
and db
functions 让您分别从 repl 运行处理程序操作和数据库查询:
$ cabal repl
db $ selectList [UserName ==. "foo"] []
编辑:我还使用此信息更新了Yesod's wiki page on GHCi。它包含更多示例并涵盖了一些高级用法,例如使用调试器。
【讨论】:
谢谢!这正是我一直在寻找的。span>以上是关于如何在 REPL 中运行 Yesod 的数据库操作?的主要内容,如果未能解决你的问题,请参考以下文章