PostgreSQL,MySQL和SQLite3的查询构建器,设计灵活,便携且易于使用。
A SQL query builder that is flexible, portable, and fun to use!
A batteries-included, multi-dialect (PostgreSQL, MySQL, CockroachDB, MSSQL, SQLite3, Oracle (including Oracle Wallet Authentication)) query builder for
Node.js, featuring:
Node.js versions 12+ are supported.
You can report bugs and discuss features on the GitHub issues page or send tweets to @kibertoad.
For support and questions, join our Gitter channel.
For knex-based Object Relational Mapper, see:
To see the SQL that Knex will generate for a given query, you can use Knex Query Lab
We have several examples on the website. Here is the first one to get you started:
const knex = require('knex')({client: 'sqlite3',connection: {filename: './data.db',},});try {// Create a tableawait knex.schema.createTable('users', (table) => {table.increments('id');table.string('user_name');})// ...and another.createTable('accounts', (table) => {table.increments('id');table.string('account_name');table.integer('user_id').unsigned().references('users.id');});// Then query the table...const insertedRows = await knex('users').insert({ user_name: 'Tim' });// ...and using the insert id, insert into the other table.await knex('accounts').insert({account_name: 'knex',user_id: insertedRows[0],});// Query both of the rows.const selectedRows = await knex('users').join('accounts', 'users.id', 'accounts.user_id').select('users.user_name as user', 'accounts.account_name as account');// map over the resultsconst enrichedRows = selectedRows.map((row) => ({ ...row, active: true }));// Finally, add a catch statement} catch (e) {console.error(e);}
import { Knex, knex } from 'knex';interface User {id: number;age: number;name: string;active: boolean;departmentId: number;}const config: Knex.Config = {client: 'sqlite3',connection: {filename: './data.db',},};const knexInstance = knex(config);try {const users = await knex<User>('users').select('id', 'age');} catch (err) {// error handling}
If you are launching your Node application with --experimental-modules, knex.mjs should be picked up automatically and named ESM import should work out-of-the-box.
Otherwise, if you want to use named imports, you’ll have to import knex like this:
import { knex } from 'knex/knex.mjs';
You can also just do the default import:
import knex from 'knex';
If you are not using TypeScript and would like the IntelliSense of your IDE to work correctly, it is recommended to set the type explicitly:
/*** @type {Knex}*/const database = knex({client: 'mysql',connection: {host: '127.0.0.1',user: 'your_database_user',password: 'your_database_password',database: 'myapp_test',},});database.migrate.latest();