A SQL query builder that is flexible, portable, and fun to use!
A batteries-included, multi-dialect (MSSQL, MySQL, PostgreSQL, SQLite3, Oracle(including Oracle Wallet Authentication), WebSQL) query builder for Node.js and the Browser, featuring:
- transactions
- connection pooling
- streaming queries
- both a promise and callback API
- a thorough test suite
- the ability to run in the Browser
Read the full documentation to get started!
For support and questions, join the #bookshelf channel on freenode IRC
For an Object Relational Mapper, see:
To see the SQL that Knex will generate for a given query, see: Knex Query Lab
We have several examples on the website. Here is the first one to get you started:
varknex=require('knex')({dialect: 'sqlite3',connection: {filename: './data.db'}});// Create a tableknex.schema.createTable('users',function(table){table.increments('id');table.string('user_name');})// ...and another.createTable('accounts',function(table){table.increments('id');table.string('account_name');table.integer('user_id').unsigned().references('users.id');})// Then query the table....then(function(){returnknex.insert({user_name: 'Tim'}).into('users');})// ...and using the insert id, insert into the other table..then(function(rows){returnknex.table('accounts').insert({account_name: 'knex',user_id: rows[0]});})// Query both of the rows..then(function(){returnknex('users').join('accounts','users.id','accounts.user_id').select('users.user_name as user','accounts.account_name as account');})// .map over the results.map(function(row){console.log(row);})// Finally, add a .catch handler for the promise chain.catch(function(e){console.error(e);});