原文: http://zetcode.com/javascript/knex/

Knex.js 教程展示了如何使用 Knex.js 在 JavaScript 中对数据库进行编程。

Knex.js

Knex.js 是用于关系数据库(包括 PostgreSQL,MySQL,SQLite3 和 Oracle)的 JavaScript 查询生成器。 它可以与回调和Promise一起使用。 它支持事务和连接池。

在本教程中,我们使用 MySQL。

安装 Knex.js

首先,我们需要安装 Knex.js。

  1. $ nodejs -v
  2. v9.11.2

我们使用 Node 版本 9.11.2。

  1. $ npm init

我们启动一个新的 Node 应用。

  1. $ npm i knex mysql2

我们安装 Knex.js 和 MySQL 驱动程序。 有两个驱动程序可用:mysqlmysql2; 我们选择了后者。

Knex.js 的数据库版本

在第一个示例中,我们找出 MySQL 的版本。

version.js

  1. const options = {
  2. client: 'mysql2',
  3. connection: {
  4. host: '127.0.0.1',
  5. user: 'user12',
  6. password: 's$cret',
  7. database: 'mydb'
  8. }
  9. }
  10. const knex = require('knex')(options);
  11. knex.raw("SELECT VERSION()").then(
  12. (version) => console.log((version[0][0]))
  13. ).catch((err) => { console.log( err); throw err })
  14. .finally(() => {
  15. knex.destroy();
  16. });

该示例返回 MySQL 的版本。

  1. const options = {
  2. client: 'mysql2',
  3. connection: {
  4. host: '127.0.0.1',
  5. user: 'user12',
  6. password: 's$cret',
  7. database: 'mydb'
  8. }
  9. }

这些是 MySQL 的连接选项。

  1. const knex = require('knex')(options);

我们加载 Knex.js 并提供连接选项。

  1. knex.raw("SELECT VERSION()").then(
  2. (version) => console.log((version[0][0]))
  3. ).catch((err) => { console.log( err); throw err })
  4. .finally(() => {
  5. knex.destroy();
  6. });

使用raw()函数,我们执行 SQL 语句。 如果语句运行正常,我们将输出输出。 否则,我们记录错误。 最后,我们使用destroy()关闭数据库连接。

  1. $ node version.js
  2. TextRow { 'VERSION()': '5.7.22-0ubuntu0.16.04.1' }

这是输出。

Knex.js 创建表

在第二个示例中,我们创建一个新的数据库表。

create_table.js

  1. const options = {
  2. client: 'mysql2',
  3. connection: {
  4. host: '127.0.0.1',
  5. user: 'user12',
  6. password: 's$cret',
  7. database: 'mydb'
  8. }
  9. }
  10. const knex = require('knex')(options);
  11. knex.schema.createTable('cars', (table) => {
  12. table.increments('id')
  13. table.string('name')
  14. table.integer('price')
  15. }).then(() => console.log("table created"))
  16. .catch((err) => { console.log(err); throw err })
  17. .finally(() => {
  18. knex.destroy();
  19. });

使用 Knex.js 模式createTable()函数创建一个新表。 我们定义模式以包含三列:id,名称和价格。

Knex.js 插入数据

接下来,我们将向创建的表中插入一些数据。

insert_cars.js

  1. const options = {
  2. client: 'mysql2',
  3. connection: {
  4. host: '127.0.0.1',
  5. user: 'user12',
  6. password: 's$cret',
  7. database: 'mydb'
  8. }
  9. }
  10. const knex = require('knex')(options);
  11. const cars = [
  12. { name: 'Audi', price: 52642 },
  13. { name: 'Mercedes', price: 57127 },
  14. { name: 'Skoda', price: 9000 },
  15. { name: 'Volvo', price: 29000 },
  16. { name: 'Bentley', price: 350000 },
  17. { name: 'Citroen', price: 21000 },
  18. { name: 'Hummer', price: 41400 },
  19. { name: 'Volkswagen', price: 21600 },
  20. ]
  21. knex('cars').insert(cars).then(() => console.log("data inserted"))
  22. .catch((err) => { console.log(err); throw err })
  23. .finally(() => {
  24. knex.destroy();
  25. });

我们用knex('cars)选择cars表,并用insert()方法插入八行。

Knex.js 选择所有行

在下面的示例中,我们从cars表中选择所有行。

select_cars.js

  1. const options = {
  2. client: 'mysql2',
  3. connection: {
  4. host: '127.0.0.1',
  5. user: 'user12',
  6. password: 's$cret',
  7. database: 'mydb'
  8. }
  9. }
  10. const knex = require('knex')(options);
  11. knex.from('cars').select("*")
  12. .then((rows) => {
  13. for (row of rows) {
  14. console.log(`${row['id']} ${row['name']} ${row['price']}`);
  15. }
  16. }).catch((err) => { console.log( err); throw err })
  17. .finally(() => {
  18. knex.destroy();
  19. });

我们使用select()函数选择所有行。 这次我们选择了具有from()函数的表格。 然后,我们遍历返回的行数组并打印三个字段。

  1. $ node select_cars.js
  2. 1 Audi 52642
  3. 2 Mercedes 57127
  4. 3 Skoda 9000
  5. 4 Volvo 29000
  6. 5 Bentley 350000
  7. 6 Citroen 21000
  8. 7 Hummer 41400
  9. 8 Volkswagen 21600

这是输出。

Knex.js 使用WHERE限制输出

SQL WHERE子句用于定义要返回的行要满足的条件。

select_where.js

  1. const options = {
  2. client: 'mysql2',
  3. connection: "mysql://root:andrea@localhost:3306/mydb"
  4. }
  5. const knex = require('knex')(options);
  6. knex.from('cars').select("name", "price").where('price', '>', '50000')
  7. .then((rows) => {
  8. for (row of rows) {
  9. console.log(`${row['name']} ${row['price']}`);
  10. }
  11. })
  12. .catch((err) => { console.log( err); throw err })
  13. .finally(() => {
  14. knex.destroy();
  15. });

该示例返回价格高于 50000 的汽车。

  1. const options = {
  2. client: 'mysql2',
  3. connection: "mysql://user12:s$cret@localhost:3306/mydb"
  4. }

这次,我们提供了一个连接 URL。

  1. knex.from('cars').select("name", "price").where('price', '>', '50000')

我们用select()选择了两列,并在where()函数中添加了WHERE子句。

  1. $ node select_where.js
  2. Audi 52642
  3. Mercedes 57127
  4. Bentley 350000

三辆汽车比 5 万辆贵。

Knex.js 排序行

我们可以使用orderBy()函数订购数据。

order_cars.js

  1. const options = {
  2. client: 'mysql2',
  3. connection: {
  4. host: '127.0.0.1',
  5. user: 'user12',
  6. password: 's$cret',
  7. database: 'mydb'
  8. }
  9. }
  10. const knex = require('knex')(options);
  11. knex.from('cars').select('name', 'price').orderBy('price', 'desc')
  12. .then((rows) => {
  13. for (row of rows) {
  14. console.log(`${row['name']} ${row['price']}`);
  15. }
  16. }).catch((err) => { console.log( err); throw err })
  17. .finally(() => {
  18. knex.destroy();
  19. });

该示例选择所有汽车,然后按价格降序对其进行排序。

  1. $ node order_cars.js
  2. Bentley 350000
  3. Mercedes 57127
  4. Audi 52642
  5. Hummer 41400
  6. Volvo 29000
  7. Volkswagen 21600
  8. Citroen 21000
  9. Skoda 9000

这是输出。

在本教程中,我们使用了Knex.js库。 我们创建了一些与 MySQL 交互的命令行程序。

您可能也对以下相关教程感兴趣: Sequelize 教程Node Postgres 教程Moment.js 教程JSON 服务器教程从 URL 中读取 JavaScript 中的 JSONJavaScript 贪食蛇教程Node Sass 教程Lodash 教程