Databases
Drivers: db_sqlite, db_postgres, db_mysql, db_odbc (db_connector), tiny_sqlite, lowdb.
ORMs and query builders: norm (ORM for SQLite/Postgres), debby (ORM by treeform), allographer (query builder), ormin (compile-time checked SQL).
NoSQL: nimongo / mongo drivers, redis (nim-redis), leveldb wrappers, lmdb.
Always use parameterized queries to prevent SQL injection.
# Nim 2: database modules live in the db_connector package
import db_connector/db_sqlite
let db = open("app.db", "", "", "")
defer: db.close()
db.exec(sql"CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INT)")
db.exec(sql"INSERT INTO users (name, age) VALUES (?, ?)", "Ana", 30) # parameterized: safe
for row in db.fastRows(sql"SELECT id, name FROM users WHERE age > ?", 18):
echo row[0], " ", row[1]
echo db.getValue(sql"SELECT COUNT(*) FROM users")
db.exec(sql"BEGIN"); ...; db.exec(sql"COMMIT")