0

我正在尝试从 SQLite 数据库加载数据,但我不知道数据格式,因为它是用户提供的。

如果所有列都属于同一类型,则此方法有效:

(entries :: [[Text]]) <- query_ connection "select * from users"

但是,如果列有不同的类型(例如 INTEGER 或 REAL),我该怎么办?

4

1 回答 1

1

TLDR:使用entries :: [[SQLData]]


您似乎正在使用sqlite-simple。在那个包中,类型query_

query_ :: FromRow r => Connection -> Query -> IO [r]

query_使用FromRowand (间接)FromField类型类。这些助手将传入的 sqlite 行和列数据转换为用户期望的格式。

但是,当源和输出类型不可转换时,这些转换可能会失败。

表示“SQLData原始”未转换的 sqlite 数据类型。将列值转换SQLData为无操作并且永远不会失败。并且使用[SQLData]for the rows 也永远不会失败,因为列表可以处理任意数量的列(与(SQLData,SQLData)元组不同)。

因此,在处理未知模式时,我们可以将[SQLData]其用作行类型,然后对SQLData值进行模式匹配以发现实际的 sqlite 类型。

于 2021-11-30T07:41:05.710 回答