任何人都知道http://hackage.haskell.org/package/sqlite-simple-0.4.9.0/docs/Database-SQLite-Simple.html是否可以运行query
或query_
在不显式指定返回类型元组的情况下打印行,出于调试目的?
或者如果没有这个包,也许还有另一个?
任何人都知道http://hackage.haskell.org/package/sqlite-simple-0.4.9.0/docs/Database-SQLite-Simple.html是否可以运行query
或query_
在不显式指定返回类型元组的情况下打印行,出于调试目的?
或者如果没有这个包,也许还有另一个?
好的,我找到了一种粗略的方法,通过更深一层,使用构建在其之上direct-sqlite
的包。sqlite-simple
import Database.SQLite.Simple
import Database.SQLite3.Direct (exec, execWithCallback)
let sql = "SELECT * FROM table LIMIT 3"
let cb count names vals = print vals
execWithCallback (connectionHandle conn) sql cb
在我的情况下打印如下:
[Just "1",Just "2016-01-23 11:25:39.16759",Just "val1"]
[Just "2",Just "2016-01-23 11:25:40.266674",Just "val2"]
[Just "3",Just "2016-01-23 11:25:41.396901",Just "val3"]
如果有人知道更好的方法,请分享!
很抱歉之前没有扫描与我的图书馆相关的问题。
这是打印来自 SELECT 查询的原始 SQLite 值的一种方法。它不是超级干净或明显。
这个想法是为它定义一个调试类型DebugShowType
和一个FromField
实例,它将每个 SQLite 行/列转换为一个字符串。
newtype DebugShowType = DebugShowType String deriving (Eq, Show, Typeable)
instance FromField DebugShowType where
fromField f = cvt f . fieldData $ f where
cvt _ v = Ok $ DebugShowType (show v)
testShowRawValues :: IO ()
testShowRawValues = do
elems <- query_ conn "SELECT 13, 'foo'" :: IO [[DebugShowType]]
mapM_ (\v -> putStrLn (show v ++ "\n")) elems
这应该打印如下内容:
[DebugShowType "SQLInteger 13",DebugShowType "SQLText \"foo\""]
这Database.SQLite.Simple.setTrace
对于跟踪哪些值被替换到您的 SQL 查询中也很有用。