【教程从零开始学Knex系列:一、安装和使用

2024年 2月 27日 57.3k 0

注意:本文所有的代码实例都是运行在 express + mysql 的环境下。

前言

Knex是一个用于Node.js的SQL查询构建器和查询执行器。它提供了一种简洁、流畅的方式来编写和执行SQL查询,同时允许开发人员使用数据库的不同方言和特定功能。

Knex支持多种流行的关系型数据库,如MySQL、PostgreSQL、SQLite和Oracle等。它提供了一套API,用于构建和执行复杂的SQL查询,包括选择、插入、更新和删除等操作。开发人员可以使用链式调用来构建查询,通过方法调用来指定查询的条件、排序、限制和连接等。

除了查询构建功能,Knex还提供了一些其他有用的特性,如事务支持、数据库迁移管理以及与异步流程的集成等。它还可以与许多流行的Node.js框架和工具进行集成,如Express、Koa和Bookshelf等。

快速开始

安装

# 安装 knex
npm install knex

# 安装 mysql数据库驱动
npm install mysql2

配置

src/config/dbConfig.js 文件下新建 Knex 配置文件,内容如下:

module.exports = {
  development: {
    client: 'mysql2',
    connection: {
      host: 'localhost',
      user: 'root',
      password: '123456',
      database: 'knex_db'
    }
  },
  production: {
	...
  }
};

src/app.js 文件中引入 dbConfig.js 配置,代码如下:

const express = require('express');
const knex = require('knex');
const dbConfig = require('./config/dbConfig.js');

const app = express();

// 根据配置创建一个 Knex 实例
const db = knex(dbConfig.development);

// 示例路由处理程序
app.get('/users', (req, res) => {
  // 使用 Knex 进行查询
  db.select('*').from('users')
    .then(users => {
      res.json(users);
    })
    .catch(error => {
      res.status(500).json({ error: 'An error occurred' });
    });
});

app.listen(3000, () => {
  console.log('Server started on port 3000');
});

以上就是 Knex 的配置和最简单实用。

Schema 模式

Knex 中,"schema" 是指用于定义和管理数据库表结构的功能。

Knexschema 功能提供了一组方法,用于创建和修改数据库表、列、约束等元数据。

Knexschema 提供主要功能:

  • 创建表和列:你可以使用 Knex 创建新的数据库表,并定义表中的列及其数据类型、长度、约束等信息。
  • 修改表结构:Knex 允许你对已存在的表进行修改,包括添加、修改或删除列,更改列的数据类型、长度和约束等。
  • 创建和管理索引:你可以使用 Knex 在表上创建索引,以提高查询性能。
  • 创建和管理约束:Knex 提供了创建和管理约束的方法,如主键约束、唯一约束、外键约束等。
  • 数据库迁移:Knex 的 schema 功能与数据库迁移密切相关。你可以使用 Knex 迁移工具来管理数据库的版本控制和迁移脚本,以便在不同环境中保持数据库结构的一致性和可迁移性。

Knexschema 功能提供的相当完善,有兴趣的可以自行到官网查阅,这里只做几个简单的演示。

官网地址:knexjs.org/guide/schem…

创建表

下面我们将使用 knexschema 创建一个数据表,表的名称是 users,有4个字段:id、name、email以及隐式时间戳「created_at、updated_at」这两个字段。

其中主键是 id 字段并且引入调用了primary()函数,会自动开启自增长功能。email自动被设置了唯一性并且不能为空,name字段不能为空。

const kenx = require('kenx');
const dbConfig = require('./config/dbConfig.js');
const db = knex(dbConfig.development);

// 创建表
db.schema.createTable('users', table => {
  table.increments('id').primary();
  table.string('name', 255).notNullable();
  table.string('email', 255).unique().notNullable();
  table.timestamps(true, true);
}).then(() => {
  console.log('Table created successfully');
}).catch(error => {
  console.error('Error creating table:', error.message);
});

Knex 提供的字段类型函数如下:

  • integer():整数
  • float():浮点数
  • decimal():十进制数
  • boolean():布尔值
  • date():日期
  • dateTime():日期时间
  • time():时间
  • timestamp():时间戳
  • string():字符串
  • text():文本
  • json():JSON
  • binary():二进制数
  • uuid():UUID
  • 创建索引和约束

    // 创建索引
    db.schema.alterTable('users', table => {
      table.index('email');
    }).then(() => {
      console.log('Index created successfully');
    }).catch(error => {
      console.error('Error creating table:', error.message);
    })
    
    // 创建约束
    db.schema.alterTable('users', table => {
      table.unique('email');
    })
    .then(() => {
      console.log('Constraint created successfully');
    })
    .catch(error => {
      console.error('Error creating constraint:', error.message);
    })
    

    删除表

    // 删除表
    async function dropTable(tableName) {
        try {
            await db.schema.dropTableIfExists(tableName);
            console.log('table dropped successfully.');
        } catch (error) {
            console.error('table drop failed: ', error.message);
        }
    }
    
    // 调用删除 users 表
    dropTable('users');
    

    总结

    Knex是一个强大而灵活的SQL查询构建器,使开发人员可以以一种简单、一致的方式与不同的关系型数据库进行交互。它简化了数据库查询的编写和执行过程,提供了更高层次的抽象,同时保留了灵活性和可扩展性。

    本文简单演示了Knex的安装和Schema的使用,欢迎评论区交流。

    相关文章

    Oracle如何使用授予和撤销权限的语法和示例
    Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
    下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
    社区版oceanbase安装
    Oracle 导出CSV工具-sqluldr2
    ETL数据集成丨快速将MySQL数据迁移至Doris数据库

    发布评论