gpt4 book ai didi

database - 带有 OCaml 的 SQLite

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:22 24 4
gpt4 key购买 nike

抱歉我的英语不好,如果有什么不清楚请问我,我会解释的。我的目标是在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com