or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

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

0

# Knex.js

1

2

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.

3

4

## Package Information

5

6

- **Package Name**: knex

7

- **Package Type**: npm

8

- **Language**: JavaScript/TypeScript

9

- **Installation**: `npm install knex`

10

11

## Core Imports

12

13

```javascript

14

const knex = require('knex');

15

```

16

17

For TypeScript:

18

19

```typescript

20

import knex from 'knex';

21

import { Knex } from 'knex';

22

```

23

24

For ESM:

25

26

```javascript

27

import knex from 'knex';

28

```

29

30

## Basic Usage

31

32

```javascript

33

const knex = require('knex')({

34

client: 'sqlite3',

35

connection: {

36

filename: './mydb.sqlite'

37

}

38

});

39

40

// Basic query

41

const users = await knex('users')

42

.select('*')

43

.where('age', '>', 18);

44

45

// Insert data

46

await knex('users').insert({

47

name: 'John Doe',

48

email: 'john@example.com',

49

age: 25

50

});

51

52

// Update data

53

await knex('users')

54

.where('id', 1)

55

.update({ age: 26 });

56

57

// Create table

58

await knex.schema.createTable('posts', table => {

59

table.increments('id');

60

table.string('title').notNullable();

61

table.text('content');

62

table.integer('user_id').references('id').inTable('users');

63

table.timestamps(true, true);

64

});

65

```

66

67

## Architecture

68

69

Knex.js is built around several key components:

70

71

- **Main Knex Instance**: Central factory that creates database connections and query builders

72

- **Query Builder**: Fluent interface for constructing SQL queries with method chaining

73

- **Schema Builder**: Database schema management for creating, altering, and dropping tables/views

74

- **Migration System**: Version control for database schema changes

75

- **Transaction Manager**: ACID transaction support with savepoints and rollbacks

76

- **Connection Pooling**: Efficient database connection management

77

- **Multi-Dialect Support**: Unified API across different database systems

78

79

## Capabilities

80

81

### Core Knex Instance

82

83

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

84

85

```typescript { .api }

86

interface KnexConfig {

87

client: string;

88

connection: string | ConnectionConfig;

89

pool?: PoolConfig;

90

migrations?: MigratorConfig;

91

seeds?: SeederConfig;

92

debug?: boolean;

93

useNullAsDefault?: boolean;

94

}

95

96

interface ConnectionConfig {

97

host?: string;

98

port?: number;

99

user?: string;

100

password?: string;

101

database?: string;

102

filename?: string;

103

ssl?: boolean | object;

104

}

105

106

function knex(config: KnexConfig): Knex;

107

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

108

109

interface Knex {

110

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

111

raw(sql: string, bindings?: readonly RawBinding[] | ValueDict): Knex.Raw;

112

ref(columnName: string): Knex.Ref<string, { [K in string]: string }>;

113

transaction<T>(callback: (trx: Knex.Transaction) => Promise<T>): Promise<T>;

114

schema: Knex.SchemaBuilder;

115

migrate: Knex.Migrator;

116

seed: Knex.Seeder;

117

fn: Knex.FunctionHelper;

118

client: Knex.Client;

119

destroy(): Promise<void>;

120

}

121

```

122

123

### Query Building

124

125

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

126

127

```typescript { .api }

128

interface QueryBuilder<TRecord = any, TResult = any> {

129

select<ColNameUT extends keyof TRecord>(...columns: readonly ColNameUT[]): QueryBuilder<TRecord, Pick<TRecord, ColNameUT>[]>;

130

from<TTable extends TableNames>(tableName: TTable): QueryBuilder<ResolveTableType<TTable>, TResult>;

131

where<K extends keyof TRecord>(columnName: K, value: DbColumn<TRecord[K]>): QueryBuilder<TRecord, TResult>;

132

insert(data: TRecord | readonly TRecord[]): QueryBuilder<TRecord, number[]>;

133

update(data: DbRecordArr<TRecord>): QueryBuilder<TRecord, number>;

134

del(): QueryBuilder<TRecord, number>;

135

}

136

```

137

138

[Query Building](./query-builder.md)

139

140

### Schema Management

141

142

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

143

144

```typescript { .api }

145

interface SchemaBuilder {

146

createTable(tableName: string, callback: (tableBuilder: CreateTableBuilder) => any): SchemaBuilder;

147

alterTable(tableName: string, callback: (tableBuilder: AlterTableBuilder) => any): SchemaBuilder;

148

dropTable(tableName: string): SchemaBuilder;

149

hasTable(tableName: string): Promise<boolean>;

150

createSchema(schemaName: string): SchemaBuilder;

151

dropSchema(schemaName: string): SchemaBuilder;

152

}

153

154

interface CreateTableBuilder {

155

increments(columnName?: string): ColumnBuilder;

156

integer(columnName: string): ColumnBuilder;

157

string(columnName: string, length?: number): ColumnBuilder;

158

text(columnName: string): ColumnBuilder;

159

boolean(columnName: string): ColumnBuilder;

160

date(columnName: string): ColumnBuilder;

161

timestamp(columnName: string, options?: Readonly<{ useTz?: boolean; precision?: number }>): ColumnBuilder;

162

primary(columnNames: readonly string[]): TableBuilder;

163

unique(columnNames: readonly string[]): TableBuilder;

164

foreign(column: string): ReferencingColumnBuilder;

165

}

166

```

167

168

[Schema Management](./schema-builder.md)

169

170

### Migrations & Seeds

171

172

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

173

174

```typescript { .api }

175

interface Migrator {

176

make(name: string, config?: MigratorConfig): Promise<string>;

177

latest(config?: MigratorConfig): Promise<[number, string[]]>;

178

rollback(config?: MigratorConfig, all?: boolean): Promise<[number, string[]]>;

179

status(config?: MigratorConfig): Promise<number>;

180

currentVersion(config?: MigratorConfig): Promise<string>;

181

list(config?: MigratorConfig): Promise<[string[], string[]]>;

182

}

183

184

interface Seeder {

185

make(name: string, config?: SeederConfig): Promise<string>;

186

run(config?: SeederConfig): Promise<[string[]]>;

187

}

188

```

189

190

[Migrations & Seeds](./migrations-seeds.md)

191

192

### Transactions & Raw Queries

193

194

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

195

196

```typescript { .api }

197

interface Transaction extends QueryBuilder {

198

commit(value?: any): Promise<any>;

199

rollback(error?: any): Promise<any>;

200

savepoint<T>(callback: (trx: Transaction) => Promise<T>): Promise<T>;

201

isCompleted(): boolean;

202

}

203

204

interface Raw<TResult = any> extends Promise<TResult> {

205

wrap<TResult2 = TResult>(before: string, after: string): Raw<TResult2>;

206

toSQL(): Sql;

207

timeout(ms: number, options?: { cancel?: boolean }): Raw<TResult>;

208

}

209

210

function raw(sql: string, bindings?: readonly RawBinding[] | ValueDict): Raw;

211

function transaction<T>(callback: (trx: Transaction) => Promise<T>): Promise<T>;

212

```

213

214

[Transactions & Raw Queries](./transactions-raw.md)

215

216

### CLI Tools

217

218

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

219

220

```bash { .api }

221

# Initialize project

222

knex init

223

224

# Migration commands

225

knex migrate:make <name>

226

knex migrate:latest

227

knex migrate:rollback

228

knex migrate:up

229

knex migrate:down

230

knex migrate:currentVersion

231

knex migrate:list

232

233

# Seed commands

234

knex seed:make <name>

235

knex seed:run

236

```

237

238

[CLI Tools](./cli.md)

239

240

## Types

241

242

```typescript { .api }

243

type RawBinding = Value | QueryBuilder | Raw;

244

type Value = string | number | boolean | Date | Array<string | number | boolean | Date> | null | undefined;

245

type ColumnName<TRecord> = keyof TRecord | string;

246

type TableName = string;

247

248

interface Sql {

249

method: string;

250

sql: string;

251

bindings: readonly RawBinding[];

252

options: any;

253

toNative(): SqlNative;

254

}

255

256

interface SqlNative {

257

sql: string;

258

bindings: readonly RawBinding[];

259

}

260

261

interface ColumnBuilder {

262

index(indexName?: string): ColumnBuilder;

263

primary(): ColumnBuilder;

264

unique(): ColumnBuilder;

265

references(columnName: string): ReferencingColumnBuilder;

266

onDelete(command: string): ColumnBuilder;

267

onUpdate(command: string): ColumnBuilder;

268

defaultTo(value: Value): ColumnBuilder;

269

unsigned(): ColumnBuilder;

270

notNullable(): ColumnBuilder;

271

nullable(): ColumnBuilder;

272

comment(val: string): ColumnBuilder;

273

}

274

275

interface ReferencingColumnBuilder extends ColumnBuilder {

276

inTable(tableName: string): ColumnBuilder;

277

deferrable(type: deferrableType): ColumnBuilder;

278

}

279

280

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

281

282

interface PoolConfig {

283

min?: number;

284

max?: number;

285

createTimeoutMillis?: number;

286

acquireTimeoutMillis?: number;

287

idleTimeoutMillis?: number;

288

reapIntervalMillis?: number;

289

createRetryIntervalMillis?: number;

290

propagateCreateError?: boolean;

291

}

292

293

interface MigratorConfig {

294

database?: string;

295

directory?: string | readonly string[];

296

extension?: string;

297

tableName?: string;

298

schemaName?: string;

299

disableTransactions?: boolean;

300

sortDirsSeparately?: boolean;

301

loadExtensions?: readonly string[];

302

migrationSource?: MigrationSource<any>;

303

}

304

305

interface SeederConfig {

306

database?: string;

307

directory?: string | readonly string[];

308

loadExtensions?: readonly string[];

309

timestampFilenamePrefix?: boolean;

310

sortDirsSeparately?: boolean;

311

}

312

313

interface MigrationSource<TMigrationSpec> {

314

getMigrations(loadExtensions: readonly string[]): Promise<string[]>;

315

getMigrationName(migration: string): string;

316

getMigration(migration: string): Promise<TMigrationSpec>;

317

}

318

319

interface FunctionHelper {

320

now(precision?: number): Raw;

321

uuid(): Raw;

322

}

323

```