2013年2月24日日曜日

2日酔いからPersistentでキーを使って直接データを引く

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

コメントを投稿