query palabras get_by etimologia docs con and elixir ecto

elixir - get_by - palabras con ecto



¿Cómo puedo ver el SQL sin procesar generado para un Ecto.Query? (3)

Tengo un Ecto.Query y un Repo , de modo que puedo llamar a Repo.all(query) y obtener resultados. Sin embargo, los resultados no son lo que espero.

¿Cómo puedo ver el SQL sin Ecto.Query generará el Ecto.Query desde el Ecto.Query ?


Es básicamente la respuesta de Gazler , pero modificada para usar en el código:

query = from p in Post {query, params} = Ecto.Adapters.SQL.to_sql(:all, Repo, query) IO.puts("#{query}, #{inspect(params)}")

Podría usar IO.inspect simple, pero IO.inspect una consulta con barras invertidas.


Puede usar Ecto.Adapters.SQL.to_sql/3 :

iex> Ecto.Adapters.SQL.to_sql(:all, Repo, Post) {"SELECT p.id, p.title, p.inserted_at, p.created_at FROM posts as p", []}

La consulta puede ser cualquier estructura que implemente el protocolo Ecto.Queryable como Post anterior (que es un módulo que importa Ecto.Schema ). Un Ecto.Query también se puede pasar:

iex> query = Ecto.Query.where(Post, [p], p.views > 10) iex> Ecto.Adapters.SQL.to_sql(:all, Repo, query) {"SELECT p.id, p.title, p.inserted_at, p.created_at FROM posts as p WHERE p.views > $1", [10]}


Un método de ayuda conveniente para imprimir SQL en bruto

def print_sql(queryable) do IO.inspect(Ecto.Adapters.SQL.to_sql(:all, Repo, queryable)) queryable end def list_new_foos() do Foo |> where([foo], foo.bar == 1337) |> limit(100) |> print_sql |> Repo.all() end