【发布时间】:2012-04-17 05:02:47
【问题描述】:
所以我打算将 Persistent 0.9.0.1 与 Sqlite 一起使用,我正在阅读教程:http://www.yesodweb.com/book/persistent
带有插入和查询的简单sn-p编译失败:
-- START
{-# LANGUAGE QuasiQuotes, TypeFamilies, GeneralizedNewtypeDeriving, TemplateHaskell,
OverloadedStrings, GADTs, FlexibleContexts #-}
import Database.Persist
import Database.Persist.TH
import Database.Persist.Sqlite
import Control.Monad.IO.Class (liftIO)
share [mkPersist sqlSettings, mkSave "entityDefs"] [persist|
Person
name String
age Int
|]
main = withSqliteConn ":memory:" $ runSqlConn $ do
runMigration $ migrate entityDefs (undefined :: Person) -- this line added: that's it!
michaelId <- insert $ Person "Michael" 26
michael <- get michaelId
liftIO $ print michael
-- STOP
转储拼接显示没有承诺的Eq、Show 生成的 Person 实例,奇怪:
data PersonGeneric (backend :: (* -> *) -> * -> *)
= Person {personName :: String, personAge :: Int}
type Person =
PersonGeneric Database.Persist.GenericSql.Raw.SqlPersist
我是这样破解的:
liftIO $ putStrLn $ "name: " ++ (personName $ fromJust michael) ++ ", age: " ++ (show $ personAge $ fromJust michael)
然后insert无法从Sqlite取回主键:
Migrating: CREATE TABLE "person"("id" INTEGER PRIMARY KEY,"name" VARCHAR NOT NULL,"age" INTEGER NOT NULL)
proto: Pattern match failure in do expression at Database/Persist/GenericSql.hs:109:25-45
有什么想法吗?持久性是否适用于 Sqlite?
【问题讨论】:
-
能否包含错误信息?是“
(Show Person)没有实例”吗? -
@hammar 是的,在 Michael 的帮助下修复了它。
标签: sqlite haskell persistent yesod