首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从字段中获取列名

如何从字段中获取列名
EN

Stack Overflow用户
提问于 2013-04-18 05:19:05
回答 2查看 433关注 0票数 2

我已经在网上搜索并查看了postgresql-simple包的源代码。

查询(或query_)的结果属于类QueryResults。获取字段的内容很容易,但是有谁能给出一些获取列/字段名称的示例代码吗?来自PostgreSQL.Simple.FromField的Field类有一个名称属性,该属性返回一个带有列名的ByteString。但我根本无法从这个列出内容的简单示例中获得:

代码语言:javascript
复制
  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为ByteString):

代码语言:javascript
复制
  putStrLn $ " is names " ++ (B8.toString (fromJust (name field2))) ++ " " ++ (B8.toString (fromJust (name field1)))

现在,在使用第一个建议时,仍然存在获取数据和字段名称的问题,因为代码会将内容固定为field类型-它不包含数据本身,只包含元数据。第二个建议解决了这个问题,现在工作代码如下所示:

代码语言:javascript
复制
  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))

我希望这对其他人也有用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-18 05:57:31

目前我没有Postgres实例来检查这一点,但是您可以尝试引入instance FromField Field where fromField f = return . const f,然后使用name获取字段的名称。您可能会更普遍地希望

代码语言:javascript
复制
instance FromField a => FromField (a, Field) where
  fromField f bs = (,f) <$> fromField f bs

除非我在这个库的工作原理上弄错了,否则我很惊讶这些实例不在其中。

票数 0
EN

Stack Overflow用户

发布于 2013-04-18 05:46:32

恐怕不是一个恰当的答案,但太长了,不能发表评论。

如果查看该库的源代码,您将在Simple/Internal.hs中看到以下函数

代码语言:javascript
复制
name Field{..} = unsafePerformIO (PQ.fname result column)

PQ是对libpq (标准PostgreSQL客户端库)的引用,fname在给定结果集和列索引的情况下为您提供一个字段名。所以,很明显,它是可用的。

现在,我不认为这个函数是导出的,我不知道有没有办法解决这个问题,因为我是Haskell的新手。显然,您可以很容易地修补源代码。

但是,我认为如果不将所有查询列类型转换为文本(或类似内容),即使字段名可用,也无法获得动态结果集。否则,postgresql-simple将以Int或Date等形式返回它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16070448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档