Persistentでキーを使って直接データを引く
三島Haskell無名関数の会の第2回
三島Haskell無名関数の会の第2回めとのことで酒のみ仲間とお勉強をしてきました。
今回は、Haskellの
- Persistを使ったデータベースへのアクセス方法
- virthualenvを快適に使うためのvirthualenvwrapperの話
- Hakyllを使ったWebサイトの構築
ほぼ、@kzfmさんが資料を用意していただき、自分が気になっているところをピンポイントでやっていただきました、ありがとうございました。 そこで、復習ということで、ちょっと以前からうまくできなかった主キーを利用したデータへのアクセスを再度やってみました。
サンプルコード
{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings, GADTs, FlexibleContexts #-}
import Database.Persist
import Database.Persist.MySQL
import Database.Persist.TH
import Database.Persist.Store
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Resource (runResourceT, ResourceT)
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistUpperCase|
Person
name String
age Int Maybe
deriving (Show)
BlogPost
title String
authorId PersonId
deriving (Show)
|]
main :: IO ()
main = do
selectUserData
putStrLn "OK fetching data"
selectUserData :: IO ()
selectUserData = runResourceT $ getConn $ runSqlConn $ do
runMigration migrateAll
--person <- selectList [PersonName ==. "Take Ishii"] []
person <- getJust (Key (PersistInt64 1))
liftIO $ putStrLn $ personName person
blog <- getJust (Key (PersistInt64 2))
liftIO $ putStrLn $ blogPostTitle blog
getConn :: (Connection -> ResourceT IO a) -> ResourceT IO a
getConn = withMySQLConn getConnection
getConnection :: ConnectInfo
getConnection = ConnectInfo {
connectHost = "localhost",
connectPort = 3306,
connectUser = "root",
connectPassword = "",
connectDatabase = "SAMPLEDB",
connectOptions = [],
connectPath = "",
connectSSL = Nothing
}
ちょっと気になる場所
ここでちょっと気になる箇所が以下のコード、getJustしているKeyがどのテーブルなのかこの行の後ろを確認しないと一見分からないところ... この辺は、do記法てきなプリプロセスされたコードを見ないと分からないような、あの「文脈」とかいうものなのでしょうか?
blog <- getJust (Key (PersistInt64 2)) liftIO $ putStrLn $ blogPostTitle blogとりあえず、できたということで納得です、三島Haskell無名関数の皆さんありがとうございました、virthualenvとHakllyは近いうちにまとめたいと思います...
もうちょい書かないとダメですねぇ...Orz
0 件のコメント:
コメントを投稿