or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli.mdindex.mdmigrations-seeds.mdquery-builder.mdschema-builder.mdtransactions-raw.md
tile.json

tessl/npm-knex

A batteries-included SQL query & schema builder for PostgresSQL, MySQL, CockroachDB, MSSQL and SQLite3

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/knex@3.1.x

To install, run

npx @tessl/cli install tessl/npm-knex@3.1.0

index.mddocs/

Knex.js

Knex.js is a comprehensive SQL query builder library for Node.js that provides a flexible, portable, and intuitive API for building SQL queries across multiple database systems including PostgreSQL, MySQL, CockroachDB, MSSQL, SQLite3, and Oracle. It features a chainable interface for constructing complex queries, schema building capabilities, transaction support, connection pooling, streaming queries, and supports both promise-based and callback-based APIs.

Package Information

  • Package Name: knex
  • Package Type: npm
  • Language: JavaScript/TypeScript
  • Installation: npm install knex

Core Imports

const knex = require('knex');

For TypeScript:

import knex from 'knex';
import { Knex } from 'knex';

For ESM:

import knex from 'knex';

Basic Usage

const knex = require('knex')({
  client: 'sqlite3',
  connection: {
    filename: './mydb.sqlite'
  }
});

// Basic query
const users = await knex('users')
  .select('*')
  .where('age', '>', 18);

// Insert data
await knex('users').insert({
  name: 'John Doe',
  email: 'john@example.com',
  age: 25
});

// Update data
await knex('users')
  .where('id', 1)
  .update({ age: 26 });

// Create table
await knex.schema.createTable('posts', table => {
  table.increments('id');
  table.string('title').notNullable();
  table.text('content');
  table.integer('user_id').references('id').inTable('users');
  table.timestamps(true, true);
});

Architecture

Knex.js is built around several key components:

  • Main Knex Instance: Central factory that creates database connections and query builders
  • Query Builder: Fluent interface for constructing SQL queries with method chaining
  • Schema Builder: Database schema management for creating, altering, and dropping tables/views
  • Migration System: Version control for database schema changes
  • Transaction Manager: ACID transaction support with savepoints and rollbacks
  • Connection Pooling: Efficient database connection management
  • Multi-Dialect Support: Unified API across different database systems

Capabilities

Core Knex Instance

Main knex factory function and instance management for database connections and configuration.

interface KnexConfig {
  client: string;
  connection: string | ConnectionConfig;
  pool?: PoolConfig;
  migrations?: MigratorConfig;
  seeds?: SeederConfig;
  debug?: boolean;
  useNullAsDefault?: boolean;
}

interface ConnectionConfig {
  host?: string;
  port?: number;
  user?: string;
  password?: string;
  database?: string;
  filename?: string;
  ssl?: boolean | object;
}

function knex(config: KnexConfig): Knex;
function knex<TRecord = any, TResult = any>(tableName: string): Knex.QueryBuilder<TRecord, TResult>;

interface Knex {
  <TRecord = any, TResult = any>(tableName: string): Knex.QueryBuilder<TRecord, TResult>;
  raw(sql: string, bindings?: readonly RawBinding[] | ValueDict): Knex.Raw;
  ref(columnName: string): Knex.Ref<string, { [K in string]: string }>;
  transaction<T>(callback: (trx: Knex.Transaction) => Promise<T>): Promise<T>;
  schema: Knex.SchemaBuilder;
  migrate: Knex.Migrator;
  seed: Knex.Seeder;
  fn: Knex.FunctionHelper;
  client: Knex.Client;
  destroy(): Promise<void>;
}

Query Building

Comprehensive SQL query construction with a fluent chainable interface for SELECT, INSERT, UPDATE, DELETE operations and advanced query features.

interface QueryBuilder<TRecord = any, TResult = any> {
  select<ColNameUT extends keyof TRecord>(...columns: readonly ColNameUT[]): QueryBuilder<TRecord, Pick<TRecord, ColNameUT>[]>;
  from<TTable extends TableNames>(tableName: TTable): QueryBuilder<ResolveTableType<TTable>, TResult>;
  where<K extends keyof TRecord>(columnName: K, value: DbColumn<TRecord[K]>): QueryBuilder<TRecord, TResult>;
  insert(data: TRecord | readonly TRecord[]): QueryBuilder<TRecord, number[]>;
  update(data: DbRecordArr<TRecord>): QueryBuilder<TRecord, number>;
  del(): QueryBuilder<TRecord, number>;
}

Query Building

Schema Management

Database schema operations for creating, altering, and managing tables, columns, indexes, and constraints across different database systems.

interface SchemaBuilder {
  createTable(tableName: string, callback: (tableBuilder: CreateTableBuilder) => any): SchemaBuilder;
  alterTable(tableName: string, callback: (tableBuilder: AlterTableBuilder) => any): SchemaBuilder;
  dropTable(tableName: string): SchemaBuilder;
  hasTable(tableName: string): Promise<boolean>;
  createSchema(schemaName: string): SchemaBuilder;
  dropSchema(schemaName: string): SchemaBuilder;
}

interface CreateTableBuilder {
  increments(columnName?: string): ColumnBuilder;
  integer(columnName: string): ColumnBuilder;
  string(columnName: string, length?: number): ColumnBuilder;
  text(columnName: string): ColumnBuilder;
  boolean(columnName: string): ColumnBuilder;
  date(columnName: string): ColumnBuilder;
  timestamp(columnName: string, options?: Readonly<{ useTz?: boolean; precision?: number }>): ColumnBuilder;
  primary(columnNames: readonly string[]): TableBuilder;
  unique(columnNames: readonly string[]): TableBuilder;
  foreign(column: string): ReferencingColumnBuilder;
}

Schema Management

Migrations & Seeds

Database version control through migrations and data seeding functionality for managing schema changes and populating databases.

interface Migrator {
  make(name: string, config?: MigratorConfig): Promise<string>;
  latest(config?: MigratorConfig): Promise<[number, string[]]>;
  rollback(config?: MigratorConfig, all?: boolean): Promise<[number, string[]]>;
  status(config?: MigratorConfig): Promise<number>;
  currentVersion(config?: MigratorConfig): Promise<string>;
  list(config?: MigratorConfig): Promise<[string[], string[]]>;
}

interface Seeder {
  make(name: string, config?: SeederConfig): Promise<string>;
  run(config?: SeederConfig): Promise<[string[]]>;
}

Migrations & Seeds

Transactions & Raw Queries

Transaction management with ACID compliance and raw SQL query execution for complex operations and database-specific functionality.

interface Transaction extends QueryBuilder {
  commit(value?: any): Promise<any>;
  rollback(error?: any): Promise<any>;
  savepoint<T>(callback: (trx: Transaction) => Promise<T>): Promise<T>;
  isCompleted(): boolean;
}

interface Raw<TResult = any> extends Promise<TResult> {
  wrap<TResult2 = TResult>(before: string, after: string): Raw<TResult2>;
  toSQL(): Sql;
  timeout(ms: number, options?: { cancel?: boolean }): Raw<TResult>;
}

function raw(sql: string, bindings?: readonly RawBinding[] | ValueDict): Raw;
function transaction<T>(callback: (trx: Transaction) => Promise<T>): Promise<T>;

Transactions & Raw Queries

CLI Tools

Command-line interface for managing migrations, seeds, and project initialization with comprehensive tooling support.

# Initialize project
knex init

# Migration commands
knex migrate:make <name>
knex migrate:latest
knex migrate:rollback
knex migrate:up
knex migrate:down
knex migrate:currentVersion
knex migrate:list

# Seed commands  
knex seed:make <name>
knex seed:run

CLI Tools

Types

type RawBinding = Value | QueryBuilder | Raw;
type Value = string | number | boolean | Date | Array<string | number | boolean | Date> | null | undefined;
type ColumnName<TRecord> = keyof TRecord | string;
type TableName = string;

interface Sql {
  method: string;
  sql: string;
  bindings: readonly RawBinding[];
  options: any;
  toNative(): SqlNative;
}

interface SqlNative {
  sql: string;
  bindings: readonly RawBinding[];
}

interface ColumnBuilder {
  index(indexName?: string): ColumnBuilder;
  primary(): ColumnBuilder;
  unique(): ColumnBuilder;
  references(columnName: string): ReferencingColumnBuilder;
  onDelete(command: string): ColumnBuilder;
  onUpdate(command: string): ColumnBuilder;
  defaultTo(value: Value): ColumnBuilder;
  unsigned(): ColumnBuilder;
  notNullable(): ColumnBuilder;
  nullable(): ColumnBuilder;
  comment(val: string): ColumnBuilder;
}

interface ReferencingColumnBuilder extends ColumnBuilder {
  inTable(tableName: string): ColumnBuilder;
  deferrable(type: deferrableType): ColumnBuilder;
}

type deferrableType = 'not deferrable' | 'immediate' | 'deferred';

interface PoolConfig {
  min?: number;
  max?: number;
  createTimeoutMillis?: number;
  acquireTimeoutMillis?: number;
  idleTimeoutMillis?: number;
  reapIntervalMillis?: number;
  createRetryIntervalMillis?: number;
  propagateCreateError?: boolean;
}

interface MigratorConfig {
  database?: string;
  directory?: string | readonly string[];
  extension?: string;
  tableName?: string;
  schemaName?: string;
  disableTransactions?: boolean;
  sortDirsSeparately?: boolean;
  loadExtensions?: readonly string[];
  migrationSource?: MigrationSource<any>;
}

interface SeederConfig {
  database?: string;
  directory?: string | readonly string[];
  loadExtensions?: readonly string[];
  timestampFilenamePrefix?: boolean;
  sortDirsSeparately?: boolean;
}

interface MigrationSource<TMigrationSpec> {
  getMigrations(loadExtensions: readonly string[]): Promise<string[]>;
  getMigrationName(migration: string): string;
  getMigration(migration: string): Promise<TMigrationSpec>;
}

interface FunctionHelper {
  now(precision?: number): Raw;
  uuid(): Raw;
}