csv-as-sql
v1.0.0
Published
Use CSV files like SQL tables with full CRUD, filters, sorting, and more.
Maintainers
Readme
📄 csv-as-sql
Use CSV files like a SQL database in Node.js.
Perform full CRUD operations, advanced filtering, sorting, and more — directly on local .csv files.
Perfect for lightweight data manipulation, prototyping, scripting, or offline tools!
✨ Features
- ✅ No database required — just plain CSV files
- ✅ Full CRUD:
select,insert,update,delete - 🔍 Advanced filters:
>,<,=,!=,contains - 📅 Smart date comparisons
- 📊 ORDER BY, LIMIT, OFFSET
- 🧰 Table tools:
createTable,dropTable,truncateTable,showTableDetail - 📦 Tiny footprint and super fast
📦 Installation
npm install csv-as-sql🚀 Quick Start
const CsvDB = require('csv-as-sql');
const db = new CsvDB('./data.csv');
(async () => {
await db.createTable(['name', 'email', 'age', 'created_at']);
await db.insertMany([
{ name: 'Alice', email: '[email protected]', age: '25', created_at: '2024-03-01' },
{ name: 'Bob', email: '[email protected]', age: '30', created_at: '2024-03-15' }
]);
const result = await db.select(
{ age: { op: '>', value: 25 } },
{
orderBy: [{ column: 'created_at', direction: 'desc' }],
limit: 5
}
);
console.log(result);
})();✅ Core Methods
| Method | Description |
|-------------------------|------------------------------------------------------|
| createTable(columns) | Creates a CSV file with headers |
| dropTable() | Deletes the CSV file entirely |
| truncateTable() | Clears all data, keeps header row |
| insertOne(obj) | Inserts a single row |
| insertMany(array) | Inserts array of rows |
| select(where, options)| Reads rows with filtering, sorting, limits |
| update(where, newData)| Updates rows matching filters |
| delete(where) | Deletes rows matching filters |
| showTableDetail() | Returns column names and file path |
🔍 Filters (WHERE)
Use exact match or advanced filters with operators.
Basic filter:
await db.select({ name: 'Alice' });Advanced filter:
await db.select({
age: { op: '>=', value: 25 },
name: { op: 'contains', value: 'li' }
});Supported Operators:
| Operator | Description |
|------------|-------------------------|
| = | Equal |
| != | Not Equal |
| > | Greater Than |
| < | Less Than |
| >= | Greater Than or Equal |
| <= | Less Than or Equal |
| contains | Case-insensitive match |
📊 Sorting, Limit, Offset
await db.select(
{},
{
orderBy: [
{ column: 'created_at', direction: 'desc' },
{ column: 'name', direction: 'asc' }
],
limit: 10,
offset: 5
}
);🧾 Inserting Rows
await db.insertOne(
{ name: 'Charlie', age: '28', email: '[email protected]' },
);
await db.insertMany([
{ name: 'Charlie', age: '28', email: '[email protected]' },
{ name: 'Diana', age: '32', email: '[email protected]' }
]);🩹 Truncate Table
Clear all data except the header:
await db.truncateTable();🔥 Drop Table
Delete the entire CSV file:
await db.dropTable();📌 Show Table Details
const detail = await db.showTableDetail();
console.log(detail);
/*
{
columns: ['name', 'email', 'age'],
path: '/full/path/to/data.csv'
}
*/💡 Pro Tips
- CSV headers are case-sensitive
- Empty cells are treated as empty strings (
'') - Best for small to mid-size datasets (<100k rows)
🛡 License
MIT
👨💼 Author
Made with ❤️ by Vaibhav Panday
Want to contribute? PRs and issues welcome!
💖 If you find this project useful, consider buying me a coffee.
