首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mysql-otp driver for erlang with mysql:query插入多行

问使用mysql-otp driver for erlang with mysql:query插入多行
EN

Stack Overflow用户
提问于 2018-01-17 23:35:28
回答 2查看 205关注 0票数 2

我正在使用Erlang的mysql-otp驱动程序。它似乎工作得很好,但是没有关于使用它将多行插入到表中的文档。

单行插入的简单用例:

代码语言:javascript
复制
ok = mysql:query(Pid, "INSERT INTO mytable (id, bar) VALUES (?, ?)", [1, 42]).

但是我需要插入多个值,我可以这样做吗?

代码语言:javascript
复制
  ok = mysql:query(Pid, "INSERT INTO mytable (id, bar) VALUES (?, ?)", [(1, 42),(2, 36), (3,12)]).

文档说明Params = term(),所以可能不是这样,这是一个令人沮丧的问题。

EN

回答 2

Stack Overflow用户

发布于 2018-01-18 20:28:10

当然,您可以在参数上组合使用lists:foldl/3和lists:join/2来创建所需的查询格式:

代码语言:javascript
复制
L = [[1, 42],[2, 36], [3,12]],
PreparedList = lists:foldl(fun (Params, Inserts) -> Inserts ++ [io_lib:format("(~p,~p)", Params)]  end, [], L),
%% Then you need to join these with a comma:
Prepared = lists:flatten(lists:join(",", PreparedList)),
%% this will result in "(1,42),(2,36),(3,12)"

现在您只需要使用这个Prepared变量调用mysql insert:

代码语言:javascript
复制
ok = mysql:query(Pid, "INSERT INTO mytable (id, bar) VALUES ?", [Prepared]).
%% The query will look like: "INSERT INTO mytable (id, bar) VALUES (1,42),(2,36),(3,12)"
票数 1
EN

Stack Overflow用户

发布于 2018-01-18 10:41:16

我不认为这个驱动或者mysql能做这样的事情。

我认为你应该像下面这样做

代码语言:javascript
复制
 insert_mytable(Data)->
   {ok,Ref} = mysql:prepare(Pid,insert_mytable,"INSERT INTO mytable (id, bar) VALUES (?, ?)"),
   loop_insert(_Pid,Ref,Data).
 loop_insert(_Pid,_Ref,[])-> ok;
 loop_insert(Pid,Ref,[H|T])->
    ok = mysql:execute(Pid,Ref,H),
    loop_insert(Pid,Ref,T).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48304736

复制
相关文章

相似问题

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