Haskell:Persist.sqlite-仅选择

Haskell:Persist.sqlite-仅选择,sqlite,haskell,Sqlite,Haskell,我正试图使用Persist.sqlite来查询我的数据库,……但在我找到的所有教程中,我首先必须迁移和插入数据。只有在那之后才有了选择 但如果我只想选择现有数据,该怎么办?以前没有迁移和插入 例如,在下面的代码中。如果我想跳过buildDb(目前不起作用),该怎么办 我设法得到了一个有效的例子。我猜上面的问题与导入模块有关 {-# LANGUAGE OverloadedStrings, GADTs, TypeFamilies #-} {-# LANGUAGE QuasiQuotes, Templ

我正试图使用Persist.sqlite来查询我的数据库,……但在我找到的所有教程中,我首先必须迁移和插入数据。只有在那之后才有了选择

但如果我只想选择现有数据,该怎么办?以前没有迁移和插入

例如,在下面的代码中。如果我想跳过buildDb(目前不起作用),该怎么办


我设法得到了一个有效的例子。我猜上面的问题与导入模块有关

{-# LANGUAGE OverloadedStrings, GADTs, TypeFamilies #-}
{-# LANGUAGE QuasiQuotes, TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses, GeneralizedNewtypeDeriving #-}

import Database.Persist ((>.), insertMany, Entity(..))
import Database.Persist.Sqlite (runSqlite,runMigration)
import qualified Database.Persist.TH as TH (share, mkPersist, sqlSettings, 
   mkMigrate, persistLowerCase)
import Control.Monad (mapM_)
import Database.Persist (selectList, entityVal)
import Database.Persist.Sqlite (runSqlite)
import Control.Monad.IO.Class  (liftIO)


TH.share [TH.mkPersist TH.sqlSettings, TH.mkMigrate "migrateAll"] [TH.persistLowerCase|
MyRecord
  value Int
  deriving Show
|]

create :: IO ()
create = runSqlite "test.sqlite" $ do
  let n = 10
  runMigration migrateAll
  insertMany $ map MyRecord [1..n]
  return ()

get :: IO ()
get = runSqlite "test.sqlite" $ do
   records <- selectList [MyRecordValue >. 9] []
   liftIO $ print records
{-#语言重载字符串、GADT、类型族}
{-#语言准语言,TemplateHaskell}
{-#语言MultiparamTypeClass,GeneralizedNewtypeDeriving#-}
导入数据库.Persist(>)、insertMany、Entity(..)
导入Database.Persist.Sqlite(runSqlite,runMigration)
将限定的Database.Persist.TH导入为TH(共享、mkPersist、sqlSettings、,
mkMigrate(小写)
导入控制.Monad(mapM)
导入数据库.Persist(selectList,entityVal)
导入Database.Persist.Sqlite(runSqlite)
导入控制.Monad.IO.Class(liftIO)
TH.share[TH.mkPersist TH.sqlSettings,TH.mkMigrate“migrateAll”][TH.persist小写|
我的记录
值Int
衍生节目
|]
创建::IO()
create=runSqlite“test.sqlite”$do
设n=10
运行迁移
insertMany$map MyRecord[1..n]
返回()
get::IO()
get=runSqlite“test.sqlite”$do
记录。9] []
liftIO$打印记录

如果您的数据库中有数据,并且数据与您的模型匹配,则无需迁移。如果我在创建了数据库之后对buildDb进行了注释,…则输出时会出现错误(添加到我的原始帖子中)
No instance for (Control.Monad.IO.Class.MonadIO m0)
  arising from a use of ‘insert’
The type variable ‘m0’ is ambiguous
Relevant bindings include
  buildDb :: Control.Monad.Trans.Reader.ReaderT
               persistent-2.2:Database.Persist.Sql.Types.SqlBackend
               m0
               (Key Tutorial)
    (bound at DBio.hs:35:1)
Note: there are several potential instances:
  instance Control.Monad.IO.Class.MonadIO m =>
           Control.Monad.IO.Class.MonadIO
             (conduit-1.2.5:Data.Conduit.Internal.Conduit.ConduitM i o m)
    -- Defined in ‘conduit-1.2.5:Data.Conduit.Internal.Conduit’
  instance Control.Monad.IO.Class.MonadIO m =>
           Control.Monad.IO.Class.MonadIO
             (conduit-1.2.5:Data.Conduit.Internal.Pipe.Pipe l i o u m)
    -- Defined in ‘conduit-1.2.5:Data.Conduit.Internal.Pipe’
  instance Control.Monad.IO.Class.MonadIO IO
    -- Defined in ‘Control.Monad.IO.Class’
  ...plus 16 others
In the expression: insert
In a stmt of a 'do' block:
  insert
  $ Tutorial
      2.22 "https://fpcomplete.com/school/basic-haskell-1" True
In the expression:
  do { insert
       $ Tutorial
           2.22 "https://fpcomplete.com/school/basic-haskell-1" True }
{-# LANGUAGE OverloadedStrings, GADTs, TypeFamilies #-}
{-# LANGUAGE QuasiQuotes, TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses, GeneralizedNewtypeDeriving #-}

import Database.Persist ((>.), insertMany, Entity(..))
import Database.Persist.Sqlite (runSqlite,runMigration)
import qualified Database.Persist.TH as TH (share, mkPersist, sqlSettings, 
   mkMigrate, persistLowerCase)
import Control.Monad (mapM_)
import Database.Persist (selectList, entityVal)
import Database.Persist.Sqlite (runSqlite)
import Control.Monad.IO.Class  (liftIO)


TH.share [TH.mkPersist TH.sqlSettings, TH.mkMigrate "migrateAll"] [TH.persistLowerCase|
MyRecord
  value Int
  deriving Show
|]

create :: IO ()
create = runSqlite "test.sqlite" $ do
  let n = 10
  runMigration migrateAll
  insertMany $ map MyRecord [1..n]
  return ()

get :: IO ()
get = runSqlite "test.sqlite" $ do
   records <- selectList [MyRecordValue >. 9] []
   liftIO $ print records