在以下链接中进行一些研究后
https://github.com/elixir-lang/ecto/tree/master/examples/simple
我对如何在灵药中使用ecto感到有点困惑。
总是一个声明为
的架构defmodule Weather do
use Ecto.Model
schema "weather" do
field :city, :string
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
timestamps
end
end
然后在“查询”部分
def sample_query do
query = from w in Weather,
where: w.prcp > 0.0 or is_nil(w.prcp),
select: w
Simple.Repo.all(query)
end
end
使用在天气中声明的模式
形成一个查询我的问题是我只想连接到现有数据库'TESTDB'并做一些SELECT,我不需要任何新的schmema来完成我的工作。是否有可能在外地做到这一点?
当我创建自己的查询时,如
query = from w in tenant
输入命令$ mix do deps.get, compile
后输入
错误告诉我function tenant/0 undefined
tenant
不是函数,它只是TESTDB
中的一个表,我没有在任何地方声明
我想我只是在ecto中迷失了自己
答案 0 :(得分:9)
您可以通过传递字符串来查询数据库中的任何表:
from p in "posts", where: p.id > 0
在这种情况下,您不需要定义任何架构,只需直接查询表即可。最后,您还可以直接执行SQL查询:
Ecto.Adapters.SQL.query(YourRepo, "SELECT $1", [1])
但是你失去了Ecto给你的大部分好处。
答案 1 :(得分:6)
无论是否使用Ecto
创建表,都需要声明表的架构。我认为目前没有选择自动执行此操作。例如,你可以有类似的东西:
defmodule Tenant do
use Ecto.Model
schema "tenant" do
field :id, :integer
field :name, :string
# and so on depending on the columns in your table
end
end
然后执行query = from w in Tenant, select: w