Drkcore

24 02 2013 Haskell Tweet

Persistentでキーから検索する方法

昨日の三島Haskell無名関数の会(mishima.hs)で「PersistentのKeyってどうやって作るの?」っていう話になって、宿題として持ち帰ったので朝から調べていた。

Keyは

type Key val = KeyBackend (PersistEntityBackend val) val

で、KeyBackendのデータコンストラクタがKeyなので、PersistValueのデータコンストラクタで包めばいいみたい。

ひとつレコードを作って、キーを指定して年齢を変更した後、キーでレコードを取ってきて年齢が変わっていることを確認するサンプル。SQLitのキーがInt64なのでこのサンプルではPersistInt64データコンストラクタを使っている。

{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings #-}
{-# LANGUAGE GADTs, FlexibleContexts #-}
import Database.Persist
import Database.Persist.Sqlite
import Database.Persist.TH
import Control.Monad.IO.Class (liftIO)
import Database.Persist.Store

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
Person
    name String
    age Int Maybe
    loc String default="Japan"
    deriving Show
|]

main :: IO ()
main = withSqliteConn "test.db" $ runSqlConn $ do
    runMigration migrateAll
    kzfmId <- insert $ Person "kzfm" (Just 20) "Fuji"
    liftIO $ print kzfmId
    kzfm <- getJust kzfmId
    liftIO $ print kzfm
    kzfm2 <- replace (Key (PersistInt64 1)) (kzfm {personAge = Just 36})
    liftIO $ print kzfm2
    kzfm3 <- getJust (Key (PersistInt64 1))
    liftIO $ print (personAge kzfm3)

どういうメソッドがあるのかはDatabase.Persist の関数群を簡単に説明が参考になる。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021