2014-01-07 6 views
5

Wie zum Beispiel, fügen Sie einen neuen Benutzer in eine Datenbank ein, die Jessod Anwendungsmodelle verwendet? Oder gibt es einen besseren Weg?Wie führe ich Datenbankabfragen in GHCi in Yesod durch Anwendung

Ich habe es mit gerüsteten Anwendungen zu tun. Jetzt habe ich App Instanz erstellt und weiß nicht, wie Sie Anfragen mit ihm ausführen.

: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' 

Was nun?

+0

Was ist das erste, was Sie ausprobiert haben? –

+0

Es sieht so aus, als müsste ich Foundation erstellen (was standardmäßig 'App' ist) und irgendwie Anfragen damit durchführen. – s9gf4ult

+0

Ich bleibe bei der Erstellung von 'AppConfig' -Instanzen für die Erstellung von' App' mit 'makeFoundation' im' Foundation'-Modul (das standardmäßig gerastert ist). – s9gf4ult

Antwort

6

Wenn Sie nur persistente Abfragen in ghci durchführen möchten, können Sie dies tun, ohne eine Jessod-Anwendung zu erstellen. Leider unterscheidet sich dies je nach dem spezifischen Backend, das Sie verwenden möchten.

Für 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 "[email protected]" Nothing)) 

Für 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 "[email protected]" Nothing)) pcon 
> Just user <- runSqlPersistM (get userId) pcon 
> userIdent user 
2

Das Gerüst bietet (zumindest mit yesod-bin 1.4.5) eine Funktion db in Application.hs, die Sie verwenden können:

$ cabal repl 
... 
*Application> db $ insert $ User "[email protected]" Nothing 
Verwandte Themen