Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/NyxCode/ormx
bringing orm-like features to sqlx
https://github.com/NyxCode/ormx
macros mariadb mysql orm postgres rust sqlx
Last synced: 2 months ago
JSON representation
bringing orm-like features to sqlx
- Host: GitHub
- URL: https://github.com/NyxCode/ormx
- Owner: NyxCode
- License: mit
- Created: 2020-07-13T02:39:31.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-09-08T21:23:20.000Z (5 months ago)
- Last Synced: 2024-11-21T01:42:44.149Z (2 months ago)
- Topics: macros, mariadb, mysql, orm, postgres, rust, sqlx
- Language: Rust
- Homepage:
- Size: 107 KB
- Stars: 287
- Watchers: 7
- Forks: 32
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
ormx
## getting started
Add ormx and sqlx to your `Cargo.toml`
```toml
[dependencies.ormx]
version = "0.11"
features = ["postgres"][dependencies.sqlx]
version = "0.8"
features = ["postgres", "runtime-tokio-rustls"]
```## what does it do?
ormx provides macros for generating commonly used sql queries at compile time.
ormx is meant to be used together with sqlx. Everything it generates uses `sqlx::query!` under the hood, so every generated query will be checked against your database at compile time.## what doesn't it do?
ormx is not a full-fledged ORM nor a query builder. For everything except simple CRUD, you can always just use sqlx.it is required that every table contains an id column, which uniquely
identifies a row. probably, you would want to use an auto-incrementing integer for this.
this is a central requirement of ormx, and if your table does not fulfill this requirement, ormx
is not what you are looking for.## databases
| database | cargo feature |
|------------|---------------------------|
| PostgreSQL | postgres[^1] |
| MariaDB | mariadb |
| MySQL | mysql[^2] |
| SQLite | *currently not supported* |[^1]: out of these three, the `postgres` backend is the most mature.
[^2]: the `mysql` backend *does* work with both MariaDB and MySQL, though the `mariadb` backend emits cleaner and probably faster queries.## [example](https://github.com/NyxCode/ormx/tree/master/example-postgres/src/main.rs)
first, start a postgres database.
if you have docker installed, you can do so using `./scripts/postgres.sh`.
next, set the `DATABASE_URL` environment variable: `export DATABASE_URL=postgres://postgres:admin@localhost/ormx`.
now, inside `example-postgres`, use the sqlx cli to setup the database schema: `cargo sqlx db setup`.
finally, run `cargo run`.## help
if you encounter an issue or have questions, feel free to ask in [`#ormx` on the sqlx discord](https://discord.gg/mrZz4Wv8r2).
The documentation currently is not what it should be, so don't be afraid to ask for help.## migrate
### to 0.11
v0.11 updated the sqlx dependency to v0.8.
most notably, the semantics of the `sqlx::Executor` trait have somewhat changed. in most cases, this is fixed by adding a `*` here or there.### to 0.7
Since 0.7, id columns are not special anymore - if they are generated by the database, you must annotate them with `#[ormx(default)]`.## a note on reborrowing
if you run into the issue that the compiler tells you that you can't re-use a `&mut Connection` because
- `use of moved value` and
- `move occurs because 'con' has type '&mut Connection', which does not implement the 'Copy' trait`you'll have to manually reborrow the connection with `&mut *con`.