首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据库列映射到Racket中的结构列表中的结构?

如何将数据库列映射到Racket中的结构列表中的结构?
EN

Stack Overflow用户
提问于 2015-06-23 20:23:53
回答 2查看 244关注 0票数 1

我有一个名为“考勤-事件”的列表,由结构化类型的考勤事件组成。结构被定义为

代码语言:javascript
复制
(define-struct attendance-event (date flag))

“日期”是事件的日期,“标志”是代表事件类型的2个字符值。

在我的数据库中,我选择"select date,attendance_table代码“,并希望将这两列添加到每一行的考勤事件列表中。

那么,如何才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-24 14:18:54

这将执行查询并返回attendance-event结构的列表:

代码语言:javascript
复制
(for/list ([(date code)
            (in-query conn "select date, code from attendance_table")])
  (make-attendance-event date code))
票数 3
EN

Stack Overflow用户

发布于 2015-06-23 23:42:09

在将数据库行转换成哈希表之后,我发现使用它们要容易得多。以下函数将rows-result函数返回的query类型转换为不可变散列:

代码语言:javascript
复制
(require (planet jphelps/loop)) ;; Use the loop macro from Common Lisp.

(define (rows-result->hash results)
  (let ((header (rows-result-headers results)))
    (loop for row in (rows-result-rows results)
          collect (loop for ((_ . name) (_ . decltype)) in header
                        for column across row
                        with-collection-type hash/immutable
                        collect (cons name column)))))

然后,您可以像这样包装query函数:

代码语言:javascript
复制
(define (simple-query query-text conn . params)
  (rows-result->hash (apply query (list* conn query-text params))))

最后,要创建您的结构:

代码语言:javascript
复制
(loop for row in (simple-query "select date,code from attendance_table;")
      collect (make-attendance-event (hash-ref row 'date) (hash-ref row 'code)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31012789

复制
相关文章

相似问题

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