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

时间:2015-06-23 20:23:53

标签: odbc racket

我有一个名为出勤事件的列表,由结构类型出勤事件组成。结构定义为

seekBarFinishTime

" date"是活动的日期和" flag"是一个2个字符的值,表示事件的类型。

在我的数据库中,我选择"选择日期,来自attendance_table"的代码,我希望将这两列添加到每行的考勤事件列表中。

那么,怎么办呢?

2 个答案:

答案 0 :(得分:3)

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

(for/list ([(date code)
            (in-query conn "select date, code from attendance_table")])
  (make-attendance-event date code))

答案 1 :(得分:0)

我发现在将数据库行转换为哈希表后,更容易使用数据库行。以下函数将var func = function (data) { var selectedValues = {}; var sliceIndex = 0; while (Object.keys(selectedValues).length < 3 && sliceIndex < data[0].length) { selectedValues[data[0][sliceIndex]] = true; sliceIndex++; } return data.map(function (axis) { return axis.slice(0, sliceIndex); }); }; console.log(func([[1,1,2,2,3,3,4,4,5,5],[0,0,0,1,0,1,0,1,0,1]])); 函数返回的rows-result类型转换为不可变哈希值列表:

query

然后你可以像这样包装(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

最后,要创建你的结构:

(define (simple-query query-text conn . params)
  (rows-result->hash (apply query (list* conn query-text params))))