Pgocaml自定义sql查询

时间:2013-08-13 14:50:03

标签: ocaml

我正在尝试编写一个只删除表的查询。

  let drop_table dbh table_name =
    let query = String.concat " " ["drop table"; table_name] in
    PGSQL(dbh) query

我从查询中收到以下错误

File "save.ml", line 37, characters 10-11:
Parse error: STRING _ expected after ")" (in [expr])
File "save.ml", line 1:
Error: Preprocessor error

为什么我收到此错误?看来这个函数是有效的Ocaml语法。

谢谢你们!

1 个答案:

答案 0 :(得分:4)

使用PG'OCaml的语法扩展时,无法构造query。您必须提供文字字符串。这是获得PG'Ocaml编译时查询验证的权衡。如果query可能是任何OCaml表达式,PG'OCaml将不知道如何在编译时验证它。

就个人而言,我已经完全停止使用语法扩展。我的感觉是它无法扩展到大型项目。相反,我直接致电prepareexecute。例如,此函数将创建一个新的数据库连接(假设先前已定义连接参数),运行给定的查询,并关闭连接:

let exec query =
  let db = PGOCaml.connect ~host ~user ~database ~port ~password ()  
  PGOCaml.prepare db ~query ();  
  let ans = PGOCaml.execute db ~params:[] () in  
  PGOCaml.close db;  
  ans

当然,这不是一个强大的实现,不应该在生产代码中使用。它不处理错误,也不是异步的。