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 件のコメント:
コメントを投稿