database - 带有 OCaml 的 SQLite

标签 database sqlite ocaml

抱歉我的英语不好,如果有什么不清楚请问我,我会解释的。 我的目标是在 OCaml 中做后端,开始“认真地玩”这种语言,我选择做后端项目,因为我也想在 React 中做前端,以提高我的 React 技能(我使用 OCaml 是出于热情,并且争取工作我是网络开发人员)

我选择了 sqlite(带有这个库:http://mmottl.github.io/sqlite3-ocaml/api/Sqlite3.html)作为数据库以避免数据库配置

我想为数据库调用做一个小包装(所以如果我选择更改数据库类型我只需要更改它),并创建一个这样的函数:

val exec_query : query -> 'a List Deferred.t = <fun>

但是在 lib 中我看到了 exec 函数的这个签名:

val exec : db -> ?cb:(row -> headers -> unit) -> string -> Rc.t = <fun>

结果逐行传递给回调,但出于我的目的,我认为我需要某种对象(列表、数组等),但我不知道如何从这个函数中获取它。

有人可以建议如何进行吗?

最佳答案

我猜你想要 val exec_query : query -> row List Deferred.t。由于 Sqlite3 不知道 Async,您希望在单独的系统线程中执行返回行列表的调用。函数In_thread.run : (unit -> 'a) -> 'a Deferred.t (从签名中删除的可选参数)是用于此的功能。因此你想写(未经测试):

let exec_query db query =
  let rows_of_query () =
    let rows = ref [] in
    let rc = Sqlite3.exec_no_headers db query
                ~cb:(fun r -> rows := r :: !rows) in
    (* Note: you want to use result to handle errors *)
    !rows in
  In_thread.run rows_of_query

关于database - 带有 OCaml 的 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39161070/

相关文章:

C 密码数据库

php - 欠款利息数据库设计

sql - 如何更新仅显示一次的列中的值?

c++ - 如何使用 C++ 检查 sqlite 列中的 "value does not exists"

functional-programming - 为什么在 OCaml 中出现 "Reference to undefined global ` Moduletest'"?

MySQL 索引,不同类型以及何时使用它们?

database - 您通常如何将数据从电子表格导入多个数据库列?

java - sql根据日期删除

ocaml - 从位置到元素的函数转换

functional-programming - 如何将函数应用于变体?