如何使用 withMySQLConn 使用 persistent-mysql 进行查询?
How can I query using persistent-mysql using withMySQLConn?
我正在使用 persistent-mysql 并试图找到一种从 SqlPersistM ()
monad 执行简单命令的方法。但是我 运行 遇到了类型错误。
首先是withMySQLConn defaultConnectInfo
,类型如下
(MonadLogger m, MonadBaseControl IO m, MonadIO m) =>
(Connection -> m a) -> m a
这里的问题是,如果我在 IO
monad 中尝试 运行 这个,我会收到一条错误消息,指出 IO
没有 MonadLogger
实例.
λ> :t withMySQLConn defaultConnectInfo $
\c -> runSqlPersistM (runMigration migrateAll) c
<interactive>:1:1-13:
No instance for (MonadLogger IO)
arising from a use of ‘withMySQLConn’
In the expression: withMySQLConn defaultConnectInfo
In the expression:
withMySQLConn defaultConnectInfo
$ \ c -> runSqlPersistM (runMigration migrateAll) c
an older version of monad-logger
, but not anymore 好像有一个。我不确定我是否用错了,或者是否存在潜在问题。我只有一个带有持久性 2.1.1.4 设置的小型 cabal 项目,并尝试 运行 来自 cabal repl
.
的迁移
如果有任何相关性,这是我的整个数据库设置代码
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Model where
import Control.Monad.Trans.Control
import Control.Monad.IO.Class
import Control.Monad.Trans.Resource (runResourceT, ResourceT)
import Control.Monad.Logger
import Data.Text (Text)
import Data.Time (UTCTime)
import Database.Persist
import Database.Persist.TH
import Database.Persist.MySQL
import Database.Persist.Sqlite
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
[persistLowerCase|
Receipt
name Text
createdAt UTCTime
|]
我已经尝试使用 persistent-sqlite
并且一切似乎都工作正常(基于书籍教程),但我似乎无法在 MySQL.[=27= 中工作]
我正在寻找的是一个简单的片段,展示了如何使用 persistent-mysql
.[=27 执行 SqlPersistM a
查询(或等效查询) =]
这个问题是后续问题 from a GitHub issue discussion。
你快到了。您只需要使用 monad-logger
中的函数之一来提供 MonadLogger
上下文。您可能想尝试 runStdoutLoggingT
.
我正在使用 persistent-mysql 并试图找到一种从 SqlPersistM ()
monad 执行简单命令的方法。但是我 运行 遇到了类型错误。
首先是withMySQLConn defaultConnectInfo
,类型如下
(MonadLogger m, MonadBaseControl IO m, MonadIO m) =>
(Connection -> m a) -> m a
这里的问题是,如果我在 IO
monad 中尝试 运行 这个,我会收到一条错误消息,指出 IO
没有 MonadLogger
实例.
λ> :t withMySQLConn defaultConnectInfo $
\c -> runSqlPersistM (runMigration migrateAll) c
<interactive>:1:1-13:
No instance for (MonadLogger IO)
arising from a use of ‘withMySQLConn’
In the expression: withMySQLConn defaultConnectInfo
In the expression:
withMySQLConn defaultConnectInfo
$ \ c -> runSqlPersistM (runMigration migrateAll) c
an older version of monad-logger
, but not anymore 好像有一个。我不确定我是否用错了,或者是否存在潜在问题。我只有一个带有持久性 2.1.1.4 设置的小型 cabal 项目,并尝试 运行 来自 cabal repl
.
如果有任何相关性,这是我的整个数据库设置代码
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Model where
import Control.Monad.Trans.Control
import Control.Monad.IO.Class
import Control.Monad.Trans.Resource (runResourceT, ResourceT)
import Control.Monad.Logger
import Data.Text (Text)
import Data.Time (UTCTime)
import Database.Persist
import Database.Persist.TH
import Database.Persist.MySQL
import Database.Persist.Sqlite
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
[persistLowerCase|
Receipt
name Text
createdAt UTCTime
|]
我已经尝试使用 persistent-sqlite
并且一切似乎都工作正常(基于书籍教程),但我似乎无法在 MySQL.[=27= 中工作]
我正在寻找的是一个简单的片段,展示了如何使用 persistent-mysql
.[=27 执行 SqlPersistM a
查询(或等效查询) =]
这个问题是后续问题 from a GitHub issue discussion。
你快到了。您只需要使用 monad-logger
中的函数之一来提供 MonadLogger
上下文。您可能想尝试 runStdoutLoggingT
.