rawSql
为您提供了原始动力!有了这个,你可以从字面上做任何事情。在你的情况,这应该工作:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
User
age Int
deriving Show
|]
getUser :: MonadIO m => ReaderT SqlBackend m [Entity User]
getUser = rawSql "select ?? from user where age * ? > ?" [PersistInt64 2, PersistInt64 40]
main :: IO()
main = runSqlite "/home/sibi/test.db" $ do
runMigration migrateAll
johnId <- insert $ User 40
janeId <- insert $ User 41
users <- getUser
liftIO $ print (users :: [Entity User])
为了更多地了解特殊的占位符?
和??
,阅读documentation here。我在那里增加了一个很大的例子来说明问题。让我知道你是否仍然有麻烦。
上面的代码将产生一个这样的输出:
$ ./sqlitePersist
[Entity {entityKey = UserKey {unUserKey = SqlBackendKey {unSqlBackendKey = 1}}, entityVal = User {userAge = 40}},Entity {entityKey = UserKey {unUserKey = SqlBackendKey {unSqlBackendKey = 2}}, entityVal = User {userAge = 41}}]