我有一个 Ecto.Query
和 Repo
,这样我就可以调用Repo.all(query)
并得到结果。然而,结果并不是我所期望的。
如何查看原始 SQL Repo
将从 Ecto.Query
生成?
最佳答案
您可以使用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", []}
此功能在名称为
to_sql
的存储库下也可用。如果您使用的是基于 SQL 的适配器: iex> Repo.to_sql(:all, Post)
{"SELECT p.id, p.title, p.inserted_at, p.created_at FROM posts as p", []}
查询可以是任何实现 Ecto.Queryable 的结构。协议(protocol)如
Post
上面(这是一个导入 Ecto.Schema
的模块)。一个 Ecto.Query
也可以通过: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]}
关于elixir - 如何查看为 Ecto.Query 生成的原始 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770956/