defql alternatives and similar packages
Based on the "ORM and Datamapping" category.
Alternatively, view defql alternatives based on common mentions on social networks and blogs.
-
paper_trail
Track and record all the changes in your database with Ecto. Revert back to anytime in history. -
ecto_psql_extras
Ecto PostgreSQL database performance insights. Locks, index usage, buffer cache hit ratios, vacuum stats and more.
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of defql or a related project?
Popular Comparisons
README
Defql

Create elixir functions with SQL as a body.
Installation
If available in Hex, the package can be installed
by adding defql
to your list of dependencies in mix.exs
:
defp deps do
[
{:defql, "~> 0.1.1"},
{:postgrex, ">= 0.13.0"}, # optional
]
end
Configuration
It requires adapter
key, and adapter specific options.
Use with ecto:
config :defql, connection: [
adapter: Defql.Adapter.Ecto.Postgres,
repo: YourApp.Repo
]
Use standalone connection:
config :defql, connection: [
adapter: Defql.Adapter.Postgres,
hostname: "localhost",
username: "username",
password: "password",
database: "my_db",
pool: DBConnection.Poolboy,
pool_size: 1
]
Usage
We can define module to have access to our database:
defmodule UserQuery do
use Defql
defselect get(conds), table: :users, columns: [:name, :email]
definsert add(params), table: :users
defupdate update(params, conds), table: :users
defdelete delete(conds), table: :users
defquery get_by_name(name, limit) do
"SELECT * FROM users WHERE name = $name LIMIT $limit"
end
end
Right now we have easy access to users
in database:
UserQuery.get(id: "3") # => {:ok, [%{...}]}
UserQuery.add(name: "Smbdy") # => {:ok, [%{...}]}
UserQuery.update([name: "Other"],[id: "2"]) # => {:ok, [%{...}]}
UserQuery.delete(id: "2") # => {:ok, [%{...}]}
UserQuery.get_by_name("Ela", 4) # => {:ok, [%{...}, %{...}]}
We can also define common table for the whole module.
defmodule UserQuery do
use Defql, table: :users
defselect get(conds), columns: [:name, :email]
definsert add(params)
defupdate update(params, conds)
defdelete delete(conds)
end
%{...}
It's a hash with user properties straight from database.
Supported condition statements:
user_id: [1,2,3,4]
user_id: {:in, [1,2,3,4,5]}
name: {:like, "%john%"}
name: {:ilike, "%john"}
TODO
- [ ] MySQL support
- [ ] Cleanup ECTO adapter
- [ ] Support database errors
- [ ] Transactions