如何从Elixir中的Ecto.Adapters.SQL.Query结果中获取一行

时间:2017-10-23 02:39:27

标签: elixir ecto

我正在使用Ecto.Adapters.SQL
我在下面有这个查询

query = "select c.name, c.email from clients c where c.id in (1,2,3)"

然后我将查询放在我的Repo

result = SQL.query(Automessages.Repo, query , []) 

之后我得到了这个结果(Map)有3行

{:ok,
 %Mariaex.Result{columns: ["name", "email"], connection_id: nil,
  last_insert_id: nil, num_rows: 3,
  rows: [["Ana Silva", "name0@gmail.com"],
   ["Farias de melo", "name1@mail.net"],
   ["João da costa", "name3@hotmail.com"]]}}

我的问题是如何只获取行?

[["Ana Silva", "name0@gmail.com"],
   ["Farias de melo", "name1@mail.net"],
   ["João da costa", "name3@hotmail.com"]]

1 个答案:

答案 0 :(得分:2)

您可以使用模式匹配来提取行:

{:ok, %{rows: rows}} = SQL.query(Automessages.Repo, qry , [])
# rows is now [["Ana Silva", ...], ...]

请注意,如果模式匹配失败,这将抛出MatchError。如果您不想这样,可以使用case来处理它:

case SQL.query(Automessages.Repo, qry , []) do
  {:ok, %{rows: rows}} ->
    # rows is available here
  {:error, error} ->
    # some error occurred
end