Knex.js 教程
最后修改于 2023 年 10 月 18 日
在本文中,我们将展示如何使用 Knex.js 在 JavaScript 中进行数据库编程。
Knex.js
Knex.js 是一个用于关系数据库的 JavaScript 查询构建器,包括 PostgreSQL、MySQL、SQLite3 和 Oracle。它可以与回调和 Promise 一起使用。它支持事务和连接池。
在本文中,我们使用 MySQL。
设置 Knex.js
首先,我们安装 Knex.js。
$ npm init -y
我们启动一个新的 Node 应用程序。
$ npm i knex mysql2
我们安装 Knex.js 和 MySQL 驱动程序。有两个可用的驱动程序:mysql
和 mysql2
;我们选择了后者。
使用 Knex.js 获取数据库版本
在第一个示例中,我们找出 MySQL 的版本。
const options = { client: 'mysql2', connection: { host: '127.0.0.1', user: 'user12', password: 's$cret', database: 'mydb' } } const knex = require('knex')(options); knex.raw("SELECT VERSION()").then( (version) => console.log((version[0][0])) ).catch((err) => { console.log( err); throw err }) .finally(() => { knex.destroy(); });
该示例返回 MySQL 的版本。
const options = { client: 'mysql2', connection: { host: '127.0.0.1', user: 'user12', password: 's$cret', database: 'mydb' } }
这些是 MySQL 的连接选项。
const knex = require('knex')(options);
我们加载 Knex.js 并提供连接选项。
knex.raw("SELECT VERSION()").then( (version) => console.log((version[0][0])) ).catch((err) => { console.log( err); throw err }) .finally(() => { knex.destroy(); });
使用 raw
函数,我们执行 SQL 语句。如果语句运行正常,我们打印输出。否则,我们记录错误。最后,我们使用 destroy
关闭数据库连接。
$ node version.js TextRow { 'VERSION()': '5.7.22-0ubuntu0.16.04.1' }
Knex.js 创建表
在第二个示例中,我们创建一个新的数据库表。
const options = { client: 'mysql2', connection: { host: '127.0.0.1', user: 'user12', password: 's$cret', database: 'mydb' } } const knex = require('knex')(options); knex.schema.createTable('cars', (table) => { table.increments('id') table.string('name') table.integer('price') }).then(() => console.log("table created")) .catch((err) => { console.log(err); throw err }) .finally(() => { knex.destroy(); });
使用 Knex.js 模式 createTable
函数创建一个新表。我们定义模式以包含三列:id、name 和 price。
Knex.js 插入数据
接下来,我们将向创建的表中插入一些数据。
const options = { client: 'mysql2', connection: { host: '127.0.0.1', user: 'user12', password: 's$cret', database: 'mydb' } } const knex = require('knex')(options); const cars = [ { name: 'Audi', price: 52642 }, { name: 'Mercedes', price: 57127 }, { name: 'Skoda', price: 9000 }, { name: 'Volvo', price: 29000 }, { name: 'Bentley', price: 350000 }, { name: 'Citroen', price: 21000 }, { name: 'Hummer', price: 41400 }, { name: 'Volkswagen', price: 21600 }, ] knex('cars').insert(cars).then(() => console.log("data inserted")) .catch((err) => { console.log(err); throw err }) .finally(() => { knex.destroy(); });
我们使用 knex('cars)
选择 cars
表,并使用 insert
方法插入八行数据。
Knex.js 选择所有行
在下面的示例中,我们从 cars
表中选择所有行。
const options = { client: 'mysql2', connection: { host: '127.0.0.1', user: 'user12', password: 's$cret', database: 'mydb' } } const knex = require('knex')(options); knex.from('cars').select("*") .then((rows) => { for (row of rows) { console.log(`${row['id']} ${row['name']} ${row['price']}`); } }).catch((err) => { console.log( err); throw err }) .finally(() => { knex.destroy(); });
我们使用 select
函数选择所有行。这次我们使用 from
函数选择了表。然后我们遍历返回的行数组并打印这三个字段。
$ node select_cars.js 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600
Knex.js 使用 WHERE 限制输出
SQL WHERE 子句用于定义要返回的行的条件。
const options = { client: 'mysql2', connection: "mysql://root:andrea@localhost:3306/mydb" } const knex = require('knex')(options); knex.from('cars').select("name", "price").where('price', '>', '50000') .then((rows) => { for (row of rows) { console.log(`${row['name']} ${row['price']}`); } }) .catch((err) => { console.log( err); throw err }) .finally(() => { knex.destroy(); });
该示例返回价格高于 50000 的汽车。
const options = { client: 'mysql2', connection: "mysql://user12:s$cret@localhost:3306/mydb" }
这次我们提供了一个连接 URL。
knex.from('cars').select("name", "price").where('price', '>', '50000')
我们使用 select
选择了两列,并使用 where
函数添加了 WHERE
子句。
$ node select_where.js Audi 52642 Mercedes 57127 Bentley 350000
有三辆车的价格超过 50000。
Knex.js 排序行
我们可以使用 orderBy
函数对数据进行排序。
const options = { client: 'mysql2', connection: { host: '127.0.0.1', user: 'user12', password: 's$cret', database: 'mydb' } } const knex = require('knex')(options); knex.from('cars').select('name', 'price').orderBy('price', 'desc') .then((rows) => { for (row of rows) { console.log(`${row['name']} ${row['price']}`); } }).catch((err) => { console.log( err); throw err }) .finally(() => { knex.destroy(); });
该示例选择所有汽车并按价格降序排序。
$ node order_cars.js Bentley 350000 Mercedes 57127 Audi 52642 Hummer 41400 Volvo 29000 Volkswagen 21600 Citroen 21000 Skoda 9000
来源
在本文中,我们使用了 Knex.js
库。我们创建了一些与 MySQL 交互的命令行程序。