Contenu connexe
Similaire à Haskellday rf
Similaire à Haskellday rf (20)
Haskellday rf
- 2. 自己紹介
rf
@rf0444
最近ホットな言語
Haskell
今読んでいる本
「Learn You a Haskell for Great Good!」 (10章)
- 5. インストール
共通
cabal install persistent-template
SQLite
cabal install persistent-sqlite
MongoDB
cabal install persistent-mongoDB
- 6. インストール
共通
cabal install persistent-template
PostgreSQL
cabal install persistent-postgresql
MySQL
cabal install persistent-mysql
- 8. つないでみる
SQLite
{-# LANGUAGE OverloadedStrings #-}
import Database.Persist.Sqlite
main = withSqliteConn path $ runSqlConn $ do
return ()
where
path = "hogesql.sqlite3"
- 11. つないでみる
MySQL
import Database.Persist.MySQL
main = withMySQLConn conf $ runSqlConn $ do
return ()
where
conf = defaultConnectInfo {
connectHost = "localhost" -- default
connectPort = 3306 -- default
connectUser = "hoge" -- default : “root”
connectPassword = "hoge" -- default : no password
connectDatabase = "hoge" -- default : “test”
}
- 13. Model の定義
Yesod の Model.hs (SQLite)
model Model where
import Prelude
import Yesod
import Data.Text (Text)
import Database.Persist.Quasi
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
$(persistFileWith lowerCaseSettings "config/models")
- 14. Model の定義
Model.hs (SQLite)
{-# LANGUAGE TypeFamilies, TemplateHaskell, FlexibleContexts, GADTs #-}
model Model where
import Data.Text (Text)
import Database.Persist.Quasi
import Database.Persist.Sqlite
import Database.Persist.TH
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
$(persistFileWith lowerCaseSettings "config/models")
- 15. Model の定義
Yesod の Model.hs (MongoDB)
model Model where
import Prelude
import Yesod
import Data.Text (Text)
import Database.Persist.Quasi
import Database.Persist.MongoDB
import Language.Haskell.TH.Syntax
share [mkPersist MkPersistSettings { mpsBackend = ConT ''Action }, mkMigrate "migrateAll"]
$(persistFileWith lowerCaseSettings "config/models")
- 16. Model の定義
Model.hs (MongoDB)
{-# LANGUAGE TypeFamilies, TemplateHaskell, FlexibleContexts, GADTs #-}
model Model where
import Data.Text (Text)
import Database.Persist.Quasi
import Database.Persist.MongoDB
import Database.Persist.TH
import Language.Haskell.TH.Syntax
share [mkPersist MkPersistSettings { mpsBackend = ConT ''Action }, mkMigrate "migrateAll"]
$(persistFileWith lowerCaseSettings "config/models")
- 19. マイグレーション
SQLite
{-# LANGUAGE OverloadedStrings #-}
import Database.Persist.Sqlite
import Model
main = withSqliteConn path $ runSqlConn $ do
runMigration migrateAll
return ()
where
path = "hogesql.sqlite3"
- 22. マイグレーション
SQLite
$ ls -F
Model.hs config/ main.hs
$ runhaskell main.hs
Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email"
VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT
"unique_user" UNIQUE ("email"))
- 23. マイグレーション
SQLite
$ ls -F
Model.hs config/ main.hs
$ runhaskell main.hs
Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email"
VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT
"unique_user" UNIQUE ("email"))
$ ls -F
Model.hs config/ hogesql.sqlite3 main.hs
- 24. マイグレーション
SQLite
$ ls -F
Model.hs config/ main.hs
$ runhaskell main.hs
Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email"
VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT
"unique_user" UNIQUE ("email"))
$ ls -F
Model.hs config/ hogesql.sqlite3 main.hs
$ sqlite3 hogesql.sqlite3 .table
user
- 25. あとは
{-# LANGUAGE OverloadedStrings #-}
import Database.Persist.Sqlite
import Model
main = withSqliteConn path $ runSqlConn $ do
runMigration migrateAll
insert $ User {
userEmail = "hoge@hoge.jp",
userPassword = Just "hoge"
}
return ()
where
path = "hogesql.sqlite3"