假设我有以下(PostgreSQL)表定义:
CREATE TABLE books (
id serial NOT NULL,
title character varying NOT NULL,
PRIMARY KEY (id)
);
以及以下记录定义:
data Book =
{ id :: Int
, title :: String
}
查询数据库中所有书籍的“取消映射”功能的基本示例是什么,
allBooks :: Database -> IO [Book]
?
最佳答案
事实证明,我的做法是错误的。
偶然发现Mats Rauhala的标题为 Example on using HaskellDB 的非常有用的博文,我可以写一个测试项目来读取books
的记录 table 。
我首先需要定义“布局”,使用haskelldb-th,这还不错:
{-# LANGUAGE TemplateHaskell #-}
module Tables.Books (
books
, id
, title
, Books
) where
import Database.HaskellDB.CodeGen
import Prelude hiding (id)
mkDBDirectTable "Books" [
("id", [t|Int|])
, ("title", [t|String|])
]
从那里,
allBooks
功能是:allBooks db = query db $ do
books <- table B.books
return books
在哪里
B
是导入模块的限定名Tables.Books
. allBooks
具有以下类型:allBooks :: Database -> IO [Record (Database.HaskellDB.HDBRec.RecCons Tables.Books.Id Int (Database.HaskellDB.HDBRec.RecCons Tables.Books.Title String Database.HaskellDB.HDBRec.RecNil))]
To print out each title, I used:
main :: IO ()
main = do
books <- postgresqlConnect [("host", "localhost"), ("user", "test"), ("password", "********")] allBooks
mapM_ putStrLn (map (\r -> r!B.title) books)
return ()
编辑:我创建了一个 git 存储库,其中包含此示例的完整源代码:dtrebbien/haskelldb-example
关于haskell - 使用 HaskellDB 取消映射表记录的基本示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7697620/