ecto - 用于数据映射和语言集成查询的工具包。

Created at: 2013-06-13 02:42:06
Language: Elixir
License: Apache-2.0

埃克托


构建状态 Hex.pm 文档

安装

添加到 中的依赖项列表中:

:ecto
mix.exs

def deps do
  [
    {:ecto, "~> 3.8"}
  ]
end

大约

Ecto是用于Elixir的数据映射和语言集成查询的工具包。下面是一个示例:

# In your config/config.exs file
config :my_app, ecto_repos: [Sample.Repo]

config :my_app, Sample.Repo,
  database: "ecto_simple",
  username: "postgres",
  password: "postgres",
  hostname: "localhost",
  port: "5432"

# In your application code
defmodule Sample.Repo do
  use Ecto.Repo,
    otp_app: :my_app,
    adapter: Ecto.Adapters.Postgres
end

defmodule Sample.Weather do
  use Ecto.Schema

  schema "weather" do
    field :city     # Defaults to type :string
    field :temp_lo, :integer
    field :temp_hi, :integer
    field :prcp,    :float, default: 0.0
  end
end

defmodule Sample.App do
  import Ecto.Query
  alias Sample.{Weather, Repo}

  def keyword_query do
    query =
      from w in Weather,
           where: w.prcp > 0 or is_nil(w.prcp),
           select: w

    Repo.all(query)
  end

  def pipe_query do
    Weather
    |> where(city: "Kraków")
    |> order_by(:temp_lo)
    |> limit(10)
    |> Repo.all
  end
end

Ecto通常用于通过Ecto.Adapters.SQL(源代码)与数据库(例如Postgres和MySQL)进行交互。Ecto也通常用于将来自任何来源的数据映射到Elixir结构中,无论它们是否由数据库支持。

有关详细信息,请参阅入门指南联机文档。其他可用资源包括:

  • 编程Ecto,由Darin Wilson和Eric Meadows-Jönsson编写,指导你从基础知识到高级概念

  • The Little Ecto Cookbook,Dashbit的免费电子书,是对现有Ecto指南的策展,其中包含一些额外的内容

用法

你需要将 Ecto 和数据库适配器作为依赖项添加到文件中。支持的数据库及其适配器包括:

mix.exs

数据库 埃克托适配器 依赖
PostgreSQL Ecto.Adapters.Postgres ecto_sql(需要 Ecto v3.0+)+ postgrex
我的SQL Ecto.Adapters.MyXQL ecto_sql(需要 Ecto v3.3+)+ myxql
MSSQL Ecto.Adapters.Tds ecto_sql(需要 Ecto v3.4+)+ tds
SQLite3 Ecto.Adapters.SQLite3 ecto_sql(需要 Ecto v3.5+)+ ecto_sqlite3
断续器 埃索 ecto + etso

例如,如果你想使用PostgreSQL,请添加到你的文件中:

mix.exs

defp deps do
  [
    {:ecto_sql, "~> 3.0"},
    {:postgrex, ">= 0.0.0"}
  ]
end

然后在 shell 中运行以获取依赖项。如果要使用其他数据库,只需从上表中选择适当的依赖项即可。

mix deps.get

最后,在存储库定义中,你需要指定所选依赖项的相应属性。对于PostgreSQL,它是:

adapter:

defmodule MyApp.Repo do
  use Ecto.Repo,
    otp_app: :my_app,
    adapter: Ecto.Adapters.Postgres,
  ...

支持的版本

分支 支持
版本3.7 错误修复
版本3.6 仅安全补丁
3.5 版 仅安全补丁
版本3.4 仅安全补丁
版本3.3 仅安全补丁
版本3.2 从 02/2022 起不受支持
版本3.1 从 02/2020 开始不支持
3.0 版 从 02/2020 开始不支持
版本2.2 从 02/2022 起不受支持
版本2.1 自 2018 年 10 月起不受支持
版本2.0 自 08/2017 起不受支持
版本1.1 自 03/2018 起不受支持
1.0 版 从 05/2017 起不支持

在3.0版本中,Ecto API已经变得稳定。我们的主要重点是提供错误修复和增量更改。

重要链接

运行测试

克隆存储库并获取其依赖项:

$ git clone https://github.com/elixir-ecto/ecto.git
$ cd ecto
$ mix deps.get
$ mix test

请注意,不会运行文件夹中的测试。要运行集成测试,你可以在同级目录中进行克隆,然后使用指向 Ecto 检出的环境变量运行其集成测试:

mix test
integration_test
ecto_sql
ECTO_PATH

$ cd ..
$ git clone https://github.com/elixir-ecto/ecto_sql.git
$ cd ecto_sql
$ mix deps.get
$ ECTO_PATH=../ecto mix test.all

运行容器化测试

还可以使用 earthly 在容器化环境中运行集成测试:

$ earthly -P +all

你还可以使用它来以交互方式调试任何失败的集成测试,方法是:

$ earthly -P -i --build-arg ELIXIR_BASE=1.8.2-erlang-21.3.8.21-alpine-3.13.1 +integration-test

然后,一旦进入容器化的 shell,就可以使用相应的命令检查底层数据库:

PGPASSWORD=postgres psql -h 127.0.0.1 -U postgres -d postgres ecto_test
MYSQL_PASSWORD=root mysql -h 127.0.0.1 -uroot -proot ecto_test
sqlcmd -U sa -P 'some!Password'

商标

“Ecto”和Ecto徽标版权所有(c)2020 Dashbit。

Ecto标志由Dane Wesolko设计。

许可证

版权所有 (c) 2013 Plataformatec
版权所有 (c) 2020 Dashbit

根据 Apache 许可证版本 2.0(“许可证”)进行许可;除非符合许可证,否则你不得使用此文件。你可以在 https://www.apache.org/licenses/LICENSE-2.0 处获得许可证的副本

除非适用法律要求或书面同意,否则根据许可证分发的软件将按“原样”分发,不附带任何明示或暗示的保证或条件。请参阅许可证,了解管理许可证下的权限和限制的特定语言。