如何在Yesod应用程序中的GHCi中执行数据库查询 [英] How to perform database queries in GHCi in Yesod Application

查看:183
本文介绍了如何在Yesod应用程序中的GHCi中执行数据库查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,如何使用Yesod应用程序的模型将新用户插入数据库?还是有更好的方法?



我正在处理脚手架应用程序。现在我创建了 App 实例,并且不知道如何使用它执行请求。

 :额外
数据额外
=额外{extraCopyright :: Data.Text.Internal.Text,
extraAnalytics ::可能Data.Text.Internal.Text}
- - 定义于`Settings

let e = ExtraasdfNothing
let c = AppConfig {appEnv = Development,appPort = 3000,appRoot =/,appHost =localhost, appExtra = e}
f< - makeFoundation c
:tf
f :: App

:i App
data App
= App { settings :: AppConfig DefaultEnv Extra,
getStatic :: Yesod.Static.Static,
connPool :: persistent-1.2.3.0:Database.Persist.Class.PersistConfig.PersistConfigPool
PersistConf,
httpManager :: http-client-0.2.0.1:Network.HTTP.Client.Types.Manager,
persistConfig :: PersistConf,
appLogger :: Yesod.Core.Types.Logger}
- 定义于`Foundati '

下一步是什么?

解决方案

如果您只想在ghci中执行持久查询,则可以在不创建Yesod应用程序的情况下执行此操作。不幸的是,这样做有一点不同,具体取决于你想要使用的具体后端。



对于SQLite:

 > import Database.Persist.Sqlite 
>导入模型
> pool< - createSqlitePoolyesod-test.sqlite32
> runSqliteyesod-test.sqlite3(runMigration migrateAll)
> userId< - runSqliteyesod-test.sqlite3(insert(Userfoo@bar.comNothing))

对于Postgresql:

   - 在Shell中:$ createdb yesod-test 
> import Database.PostgreSQL.Simple
> con< - connectPostgreSQLdbname = yesod-test
> import Database.Persist.Postgresql
> pcon< - openSimpleConn con
>导入模型
> runSqlPersistM(runMigration migrateAll)pcon
> userId< - runSqlPersistM(insert(Userfoo@bar.comNothing))pcon
> Just user< - runSqlPersistM(get userId)pcon
> userIdent用户


How to, for example, insert a new User into a database using Yesod application's models? Or is there a better way?

I am dealing with scaffolded application. Now I created App instance and dont know how to perform requests using it.

:i Extra
data Extra
  = Extra {extraCopyright :: Data.Text.Internal.Text,
           extraAnalytics :: Maybe Data.Text.Internal.Text}
        -- Defined in `Settings

let e = Extra "asdf" Nothing
let c = AppConfig {appEnv = Development, appPort = 3000, appRoot = "/", appHost = "localhost", appExtra = e}
f <- makeFoundation c
:t f
f :: App

:i App
data App
  = App {settings :: AppConfig DefaultEnv Extra,
         getStatic :: Yesod.Static.Static,
         connPool :: persistent-1.2.3.0:Database.Persist.Class.PersistConfig.PersistConfigPool
                       PersistConf,
         httpManager :: http-client-0.2.0.1:Network.HTTP.Client.Types.Manager,
         persistConfig :: PersistConf,
         appLogger :: Yesod.Core.Types.Logger}
        -- Defined in `Foundation'

What next?

解决方案

If you just want to do Persistent queries in ghci you can do this without creating a Yesod application. Unfortunately doing this is differs quite a bit depending on the specific back end you want to use.

For SQLite:

> import Database.Persist.Sqlite
> import Model
> pool <- createSqlitePool "yesod-test.sqlite3" 2
> runSqlite "yesod-test.sqlite3" (runMigration migrateAll)
> userId <- runSqlite "yesod-test.sqlite3" (insert (User "foo@bar.com" Nothing))

For Postgresql:

-- In Shell: $ createdb yesod-test
> import Database.PostgreSQL.Simple
> con <- connectPostgreSQL  "dbname=yesod-test"
> import Database.Persist.Postgresql
> pcon <- openSimpleConn con
> import Model
> runSqlPersistM (runMigration migrateAll) pcon
> userId <- runSqlPersistM (insert (User "foo@bar.com" Nothing)) pcon
> Just user <- runSqlPersistM (get userId) pcon
> userIdent user

这篇关于如何在Yesod应用程序中的GHCi中执行数据库查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆