A simple command-line utility for key-value storage based on an sqlite3 db
sqey [options] <database> [options] <command> [args...]
# Store and retrieve values
sqey example1.db set name Alice age 30 city London
sqey example1.db get name age city
# Alice
# 30
# London
# Read key-value pairs from stdin
echo -e "foo\nbar\nbaz\nqux" | sqey example2.db -I set
sqey example2.db keys
# foo
# baz
# Key-values in the reverse order of keys
sqey example2.db -r key-values
# baz
# qux
# foo
# bar
# Create DB on first use (`get-or-else` doesn't write the default value)
sqey new.db -n get-or-else planet unknown
# unknown
sqey new.db keysSupported Zig version is 0.16.0
zig build in the project folder for debug build
zig build --release=small for the release build
This utility requires sqlite3 c library to be installed on your machine
Tested on Arch Linux and MacOS
| Command | Description | Example |
|---|---|---|
set |
Insert or update key-value pairs | sqey example.db set name Alice age 30 |
get |
Retrieve values by key. Fails if any key is missing | sqey example.db get name age |
get-or-else |
Retrieve value, or print a default if missing | sqey example.db get-or-else country N/A |
get-or-else-set |
Like get-or-else, but also stores the default |
sqey example.db get-or-else-set country UK |
keys |
List all keys | sqey example.db keys |
key-values |
List all keys and values (alternating) | sqey example.db key-values |
keys-like |
List keys matching a SQL LIKE pattern | sqey example.db keys-like 'na%' |
delete |
Delete keys. Fails if any key is missing | sqey example.db delete city |
delete-if-exists |
Delete keys without error if missing | sqey example.db delete-if-exists missing_key |
rename |
Rename keys (pairs of old/new names) | sqey example.db rename old_key new_key |
compare-and-swap |
Compare and swap multiple key-value pairs. Fails if any old value does not match current value | sqey example.db compare-and-swap key1 old1 new1 key2 old2 new2 |
All commands that accept keys or key-value pairs can accept more than one in a single invocation
| Option | Description |
|---|---|
-n |
Create the database file if it does not exist (set and get-or-else-set default to true) |
-o |
Open in readonly mode (write commands fail) |
-r |
Reverse output order for keys, key-values, etc. |
-I |
Read commands and arguments from stdin (uses \n delimiter). Mutually exclusive with -Z/-B/-S |
-z |
Use null (\0) instead of newline as output separator |
-Z |
Use null (\0) instead of newline as input delimiter (uses stdin) |
-b |
Use binary output format (32-bit unsigned little-endian length prefix per token) |
-B |
Use binary input format (32-bit unsigned little-endian length prefix per token, uses stdin) |
-s |
Single entry output mode: output without separators |
-S |
Single entry input mode: treat all input as one value (uses stdin) |
-h / --help |
Print help |
Options can be combined: sqey example.db -rn keys (reverse, create-if-missing).