LoginSignup
16
2

More than 1 year has passed since last update.

はじめに

Ectoで生のSQLを実行してみたいとおもいます。
いつかそんな場面にでくわすことがあるかもしれません。

Ecto.Adapters.SQL.query/4のご紹介です。

Usersテーブルから一覧を取得してみます。
この記事では、説明を簡単にするため、Ectoの構文でも簡単に書ける単純なものを例にします。

以下、Ezukaはプロジェクトの名前です。

ふつうにEctoの構文で書く

iex> Ezuka.Repo.all(Ezuka.Accounts.User)

[
  #Ezuka.Accounts.User<
    __meta__: #Ecto.Schema.Metadata<:loaded, "users">,
    confirmed_at: nil,
    email: "1",
    id: 1,
    inserted_at: ~N[2022-09-11 11:53:59],
    updated_at: ~N[2022-09-11 11:53:59],
    hashed_password: "...",
    ...
  >, 
  ...
]

生のSQLを実行する

iex> query = "SELECT * from users;"
iex> {:ok, %{columns: columns, rows: rows}} = Ecto.Adapters.SQL.query(Ezuka.Repo, query)
iex> rows |> Enum.map(fn row -> Enum.zip(columns, row) |> Map.new() end)                  
[
  %{
    "confirmed_at" => nil,
    "email" => "1",
    "hashed_password" => "...",
    "id" => 1,
    "inserted_at" => ~N[2022-09-11 11:53:59.000000],
    "updated_at" => ~N[2022-09-11 11:53:59.000000]
  },
  ...
]

おわりに

Ectoで生のSQLを実行してみました。

この記事の例は単純すぎるので、どこにも有り難みはありません。
たいていのものは、Ectoの構文で書けるのだとおもいますし、書けない場合にはどこかでテーブル設計を間違えている気がしないでもないですが、どうしても生のSQLを実行したいという場面が訪れるかもしれません。

Ecto.Adapters.SQL.query/4のご紹介でした。

16
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
2