尝试使用 Ecto 在 Elixir 中执行查询时出错
Error trying to execute query in Elixir with Ecto
我有一个 Elixir 应用程序,它使用 Ecto 在 Postgres 中执行查询。
我有这个 Ecto 模式:
defmodule Person do
use Ecto.Schema
schema "person" do
field :name, :string
end
end
我正在尝试在 Elixir 中制作一个简单的 select:
query = from Person
result = Repo.all(query)
但是在执行该代码后,我看到了这个:
** (FunctionClauseError) no function clause matching in Ecto.Adapters.Postgres.Connection.expr/3
The following arguments were given to Ecto.Adapters.Postgres.Connection.expr/3:
# 1
{{:., [], [{:&, [], [0]}, "name"]}, [], []}
# 2
{{[34, "Person", 34], [84 | "0"],
Person}, []}
# 3
#Ecto.Query<from c0 in Person,
select: c0>
Attempted function clauses (showing 10 out of 33):
defp expr(-{:^, [], [ix]}-, _sources, _query)
defp expr(-{{:., _, [{:parent_as, _, [as]}, field]}, _, []}-, _sources, query) when -is_atom(field)-
defp expr({{:., _, [{:&, _, [idx]}, field]}, _, []}, sources, _query) when -is_atom(field)-
defp expr(-{:&, _, [idx]}-, sources, _query)
defp expr(-{:in, _, [_left, []]}-, _sources, _query)
defp expr(-{:in, _, [left, right]}-, sources, query) when -is_list(right)-
defp expr(-{:in, _, [left, {:^, _, [ix, _]}]}-, sources, query)
defp expr(-{:in, _, [left, %Ecto.SubQuery{} = subquery]}-, sources, query)
defp expr(-{:in, _, [left, right]}-, sources, query)
defp expr(-{:is_nil, _, [arg]}-, sources, query)
...
(23 clauses not shown)
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:590: Ecto.Adapters.Postgres.Connection.expr/3
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:1284: Ecto.Adapters.Postgres.Connection.intersperse_map/4
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:340: Ecto.Adapters.Postgres.Connection.select/3
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:113: Ecto.Adapters.Postgres.Connection.all/2
(ecto_sql 3.7.2) lib/ecto/adapters/postgres.ex:102: Ecto.Adapters.Postgres.prepare/2
(ecto 3.7.2) lib/ecto/query/planner.ex:180: Ecto.Query.Planner.query_without_cache/4
(ecto 3.7.2) lib/ecto/query/planner.ex:150: Ecto.Query.Planner.query_prepare/6
(ecto 3.7.2) lib/ecto/query/planner.ex:125: Ecto.Query.Planner.query_with_cache/7
与 Repo.all 的结果相同。
这是我使用的版本:
长生不老药:1.13
ecto_sql:3.7.2
postgrex: 0.16.2
有谁知道是什么导致了这个错误?
谢谢
终于找到问题所在了:
我在 Postgres 数据库中有一个 table,它包含两个字段:
person_age_123 和 person_name_123.
所以在我的 Elixir 架构上,我试图将这些数据库列名称映射到更“友好”的字段名称,例如 age 和 name.
所以我的 Elixir 架构如下:
defmodule EctoApp.Person do
use Ecto.Schema
schema "person" do
field :name, :string, [source: "person_name_123"]
field :age, :integer, [source: "person_age_123"]
end
end
错误是因为我使用的是 " 而不是 :,所以我认为这个想法是包含原子而不是字符串。
无论如何,我认为 Elixir 可以显示更友好的消息错误,因为我在尝试了很多东西后才发现问题。
我有一个 Elixir 应用程序,它使用 Ecto 在 Postgres 中执行查询。 我有这个 Ecto 模式:
defmodule Person do
use Ecto.Schema
schema "person" do
field :name, :string
end
end
我正在尝试在 Elixir 中制作一个简单的 select:
query = from Person
result = Repo.all(query)
但是在执行该代码后,我看到了这个:
** (FunctionClauseError) no function clause matching in Ecto.Adapters.Postgres.Connection.expr/3
The following arguments were given to Ecto.Adapters.Postgres.Connection.expr/3:
# 1
{{:., [], [{:&, [], [0]}, "name"]}, [], []}
# 2
{{[34, "Person", 34], [84 | "0"],
Person}, []}
# 3
#Ecto.Query<from c0 in Person,
select: c0>
Attempted function clauses (showing 10 out of 33):
defp expr(-{:^, [], [ix]}-, _sources, _query)
defp expr(-{{:., _, [{:parent_as, _, [as]}, field]}, _, []}-, _sources, query) when -is_atom(field)-
defp expr({{:., _, [{:&, _, [idx]}, field]}, _, []}, sources, _query) when -is_atom(field)-
defp expr(-{:&, _, [idx]}-, sources, _query)
defp expr(-{:in, _, [_left, []]}-, _sources, _query)
defp expr(-{:in, _, [left, right]}-, sources, query) when -is_list(right)-
defp expr(-{:in, _, [left, {:^, _, [ix, _]}]}-, sources, query)
defp expr(-{:in, _, [left, %Ecto.SubQuery{} = subquery]}-, sources, query)
defp expr(-{:in, _, [left, right]}-, sources, query)
defp expr(-{:is_nil, _, [arg]}-, sources, query)
...
(23 clauses not shown)
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:590: Ecto.Adapters.Postgres.Connection.expr/3
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:1284: Ecto.Adapters.Postgres.Connection.intersperse_map/4
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:340: Ecto.Adapters.Postgres.Connection.select/3
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:113: Ecto.Adapters.Postgres.Connection.all/2
(ecto_sql 3.7.2) lib/ecto/adapters/postgres.ex:102: Ecto.Adapters.Postgres.prepare/2
(ecto 3.7.2) lib/ecto/query/planner.ex:180: Ecto.Query.Planner.query_without_cache/4
(ecto 3.7.2) lib/ecto/query/planner.ex:150: Ecto.Query.Planner.query_prepare/6
(ecto 3.7.2) lib/ecto/query/planner.ex:125: Ecto.Query.Planner.query_with_cache/7
与 Repo.all 的结果相同。
这是我使用的版本: 长生不老药:1.13 ecto_sql:3.7.2 postgrex: 0.16.2
有谁知道是什么导致了这个错误?
谢谢
终于找到问题所在了: 我在 Postgres 数据库中有一个 table,它包含两个字段: person_age_123 和 person_name_123.
所以在我的 Elixir 架构上,我试图将这些数据库列名称映射到更“友好”的字段名称,例如 age 和 name.
所以我的 Elixir 架构如下:
defmodule EctoApp.Person do
use Ecto.Schema
schema "person" do
field :name, :string, [source: "person_name_123"]
field :age, :integer, [source: "person_age_123"]
end
end
错误是因为我使用的是 " 而不是 :,所以我认为这个想法是包含原子而不是字符串。
无论如何,我认为 Elixir 可以显示更友好的消息错误,因为我在尝试了很多东西后才发现问题。