AyeSQL 使用教程
ayesqlLibrary for using raw SQL in Elixir项目地址:https://gitcode.com/gh_mirrors/ay/ayesql
项目介绍
AyeSQL 是一个用于在 Elixir 中使用原始 SQL 的库。该库的灵感来源于 Clojure 的 Yesql 库,旨在找到原始 SQL 查询字符串和 SQL DSL 之间的平衡点。AyeSQL 的主要目标包括:
- 将 SQL 保留在 SQL 文件中
- 为每个查询生成易于使用的 Elixir 函数
- 使用映射和关键字列表参数化查询
- 允许查询的可组合性
- 开箱即用地支持使用 Ecto 或 Postgrex 的 PostgreSQL
项目快速启动
安装
AyeSQL 作为一个 Hex 包提供。要安装,请将其添加到 mix.exs
文件中的依赖项:
def deps do
[
{:ayesql, "~> 1.1"}
]
end
如果你打算使用任何提供的查询运行器,则应添加它们的依赖项:
- 添加
:ecto_sql
用于 AyeSQL Runner Ecto(默认运行器) - 添加
:postgrex
用于 AyeSQL Runner Postgrex - 添加
:ecto_sql
和:postgrex
用于在 PostgreSQL 数据库中使用 Ecto 运行查询
示例代码
创建一个 SQL 文件 queries.sql
:
-- file: queries.sql
-- name: get_avg_clicks
-- docs: Gets average click count
WITH computed_dates AS (
SELECT datetime::date AS date
FROM generate_series(current_date - :days::interval, current_date, '1 day'::interval)
)
SELECT date, AVG(clicks) AS avg_clicks
FROM computed_dates
GROUP BY date;
在 Elixir 代码中使用:
defmodule MyApp.Queries do
use AyeSQL, repo: MyApp.Repo
defqueries("queries.sql")
end
params = [days: 7]
MyApp.Queries.get_avg_clicks(params)
应用案例和最佳实践
参数化查询
AyeSQL 支持使用映射和关键字列表进行参数化查询。例如:
-- name: get_os_by_hostname
-- docs: Gets hostnames and OS names given a list of hostnames
SELECT hostname, os_name
FROM servers
WHERE hostname IN (:hostnames);
在 Elixir 中使用:
params = [hostnames: [:in ["server0", "server1", "server2"]]]
Server.get_os_by_hostname(params)
查询组合
AyeSQL 允许查询的可组合性,使得复杂的查询可以通过组合简单的查询来构建。
典型生态项目
AyeSQL 通常与以下项目一起使用:
- Ecto: 用于数据库包装和查询
- Postgrex: 用于 PostgreSQL 数据库的连接和查询
这些项目与 AyeSQL 结合使用,可以提供强大的数据库操作能力,特别是在处理复杂的 SQL 查询时。
ayesqlLibrary for using raw SQL in Elixir项目地址:https://gitcode.com/gh_mirrors/ay/ayesql
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考