我已經搜索了網頁並查看了postgresql-simple包的源代碼。如何從字段中獲取列名
查詢結果(或query_)的類型爲[QueryResults]。獲取字段的內容很容易,但任何人都可以顯示一些用於獲取列/字段名稱的示例代碼? PostgreSQL.Simple.FromField的Field類有一個name屬性,返回一個帶有列名的ByteString。但我根本無法從這個簡單的例子列舉的內容來獲得:
conn <- connect con
xs <- query_ conn "select pk,tfrom from feedback"
forM_ xs $ \(field1,field2) ->
putStrLn $ T.unpack field2 ++ " has key " ++ show (field1 :: Int)
的東西,還列出列的名稱(即PK和tfrom)。
從存儲過程(或表格)中進行select *操作時,獲取字段/列名是非常有用的,這樣我們就可以輕鬆打印結果而無需更改表或存儲過程更改。
答案後,編輯是提供: 這裏是第一建議的工作代碼(B8是字節字符串):
putStrLn $ " is names " ++ (B8.toString (fromJust (name field2))) ++ " " ++ (B8.toString (fromJust (name field1)))
現在,使用時仍然獲得兩個數據和字段名的問題作爲代碼的第一個建議將修復內容到類型字段 - 其中不包含數據本身,只是元數據。第二個建議修正了現在工作代碼如下所示:
forM_ xs $ \((data1,field1),(data2,field2)) ->
putStrLn $ " " ++ (B8.toString (fromJust (F.name field1))) ++ " " ++ (B8.toString (fromJust (F.name field2))) ++ " " ++ (T.unpack data2) ++ " " ++ (show (data1 :: Int))
我希望這證明對其他人有用。
你的第一個建議很完美,非常感謝。我的代碼不需要任何更改,它只是讓我認爲可以工作的代碼 - 突然按預期工作。對於任何需要第二個建議的人來說:它需要啓用TupleSections和FlexibleInstances。 –
你的第二個建議提供了數據和價值。查看我的原始問題以查看代碼示例。 –