bootstrap3 表单构建器_Knex - 灵活轻便的 Node.js SQL 查询构建器
不管你承认与否,Node.js 都是一个后端语言平台。那么,操作数据库,这个后端最为常用的代码逻辑之一,Node.js 自然也需要拥有。我们当然也可以使用数据库驱动直接执行 SQL 语句,但我们往往需要更为高级 SQL 构建方式。Knex.js,为 Node.js 提供了多数据库后端的 SQL 查询构建的能力,可以更加方便地完成数据库查询和操作,并为更为高层次的 ORM 框架提供基础。
Knex.js库
简介
Knex,是 knex 组织在 Github 上开源的 Node.js 的 SQL 查询构建器,项目位于 https://github.com/knex/knex,目前版本为 0.21.5。Knex 灵活轻便,支持多数据库后端,包括 MySQL、MSSQL、PostgreSQL 等,且支持:
- 数据库事务
- 连接池化
- 流式查询
- 包括 Promise 和回调形式的 API
Knex.js Github
安装
Knex 主要的目标环境的 Node.js,需求 Node.js 10+,可以使用 NPM 进行安装:
$ npm install knex --save
Knex 支持多种数据库后端,需要安装各数据库的驱动:
$ npm install pg$ npm install sqlite3$ npm install mysql$ npm install mysql2$ npm install oracledb$ npm install mssql
示例
安装完成后,在 Node.js 项目中,引入 knex,并初始化客户端实例:
var knex = require('knex')({ client: 'mysql', connection: { host : '127.0.0.1', user : 'your_database_user', password : 'your_database_password', database : 'myapp_test' }});
其中 client 参数为数据库后端类型,而 connection 代表客户端的数据库连接,包括主机、用户名、密码和数据库等。 Knex 使用连接池的方式,优化与数据库的连接性能,使用 pool 参数定义连接池的大小:
var knex = require('knex')({ pool: { min: 0, max: 7 }})
也可以使用 log 参数注册不同等级的日志记录器:
var knex = require('knex')({ log: { warn(message) { }, error(message) { }, deprecate(message) { }, debug(message) { }, }});
Knex.js文档
Knex.js 提供了数据库的 DDL 操作,使用 knex.schema 提供的方法实现。创建表,使用 createTable:
knex.schema.createTable('users', function (table) { table.increments(); table.string('name'); table.timestamps();})
createTable 的回调接受一个 table 参数,使用该 table 定义数据列,如 table.increments 提供了递增的整数 ID 列,table.string 提供了字符串列等,对应的 SQL 语句是:
create table `users` ( `id` int unsigned not null auto_increment primary key, `name` varchar(255), `created_at` datetime, `updated_at` datetime)
对应的提供了 dropTable 和 dropTableIfExists 来实现表的删除:
knex.schema.dropTable('users')knex.schema.dropTableIfExists('users')
并提供了 knex.table 实现表定义的修改:
knex.schema.table('users', function (table) { table.dropColumn('name'); table.string('first_name'); table.string('last_name');})
Knex 提供了 SQL 查询的构建器。我们来看一个简单的例子:
knex({ a: 'table', b: 'table' }) .select({ aTitle: 'a.title', bTitle: 'b.title' }) .whereRaw('?? = ??', ['a.column_1', 'b.column_2'])
查询了两个表 a 和 b,并接 select 条件,进行连表查询。
Knex 最基本的查询构建是 select 方法:
knex.select().from('books')
对应最简单的 select 语句
select * from `books`
在 select 方法中可以提供数据列来查询具体的列:
knex.select('title', 'author', 'year').from('books')
并且,可以串联 where 方法,实现等值条件查询:
knex('users').where({ first_name: 'Test', last_name: 'User'}).select('id')
Knex.js 提供了 join 方法,实现数据表的 join 查询:
knex('users') .join('contacts', 'users.id', 'contacts.user_id') .select('users.id', 'contacts.phone')
Knex.js 还提供了聚合函数:
knex('users').sum('products')
Knex.js 提供了 Promise 形式的异步接口,可以串联所有数据库操作:
// Create a tableknex.schema .createTable('users', table => { table.increments('id'); table.string('user_name'); }) // ...and another .createTable('accounts', table => { table.increments('id'); table.string('account_name'); table .integer('user_id') .unsigned() .references('users.id'); }) // Then query the table... .then(() => knex('users').insert({ user_name: 'Tim' }) ) // ...and using the insert id, insert into the other table. .then(rows => knex('accounts').insert({ account_name: 'knex', user_id: rows[0] }) ) // Query both of the rows. .then(() => knex('users') .join('accounts', 'users.id', 'accounts.user_id') .select('users.user_name as user', 'accounts.account_name as account') ) // map over the results .then(rows => rows.map(row => { console.log(row) }) ) // Finally, add a .catch handler for the promise chain .catch(e => { console.error(e); });
Knex.js 还支持 TypeScript,为数据库操作提供了数据类型:
interface User { id: number; name: string; age: number;}knex('users') .where('id') .first(); // Resolves to anyknex('users') // User is the type of row in database .where('id', 1) // Your IDE will be able to help with the completion of id .first(); // Resolves to User | undefined
SQL数据库
总结
Knex.js 作为一个 Node.js 的 SQL 查询构建器,为 JS 提供了多数据库后端的操作,并提供了丰富的数据库操作和查询功能,使得开发者不必手动编写 SQL 语句,进而使用更为高级的 JS 方法进行查询的构建,为更为高层次的 ORM 框架提供了可靠的数据库操作,是一个质量较高的 Node.js 数据库相关的基础库。
SQL数据库
bootstrap3 表单构建器_Knex - 灵活轻便的 Node.js SQL 查询构建器相关推荐
- bootstrap3 表单构建器_FastReport.NET报表设计器连接到OracleDB关系数据库
首先,您可以使用ODBC连接器.但是它充满了很多设置. FastReport.NET报表设计器连接到OracleDB关系数据库 如您所见,您需要创建数据源及其连接字符串.动作比较多. 此方法的替代方法 ...
- Node.js 系列:构建原生 Node.js 应用
原生 Node.js 应用 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效 Nod ...
- node.js 组件_使用Node.js和TransloadIt构建用户头像组件
node.js 组件 在本系列的第一部分中,我们介绍了TransloadIt -一种文件处理服务,专门处理图像,视频和音频. 如果您还没有阅读它,我建议您立即阅读,因为它涵盖了很多背景概念,您需要阅读 ...
- 使用Node.js和TransloadIt构建用户头像组件
在本系列的第一部分中,我们介绍了TransloadIt -一种文件处理服务,专门处理图像,视频和音频. 如果您还没有阅读它,我建议您立即阅读,因为它涵盖了很多背景概念,您需要阅读这些概念才能继续阅读本 ...
- slack 使用说明_如何使用Node.js为Slack构建Meetupbot
slack 使用说明 by premprakashsingh 通过premprakashsingh 如何使用Node.js为Slack构建Meetupbot (How to build a Meetu ...
- Bootstrap3 表单控件的状态
控件的状态 在表单的使用过程中,每个控件可能都会有很多状态,通过表单控件的状态,可以给用户或访问者提供一些有用的反馈. Bootstrap为表单控件提供了 4 种状态,分别是获得焦点状态.禁用状态.只 ...
- Bootstrap3 表单静态控件
静态控件 在表单中,当你需要在一个label元素的后面放置纯文本时,请在 <p>元素上添加.form-control-static类.如: <form class="for ...
- Bootstrap3 表单支持的控件
支持的控件 Bootstrap支持所有的标准表单控件,包括 input 控件.textarea 控件.checkbox 和 radio 控件.select 控件等. 1.input 控件 Bootst ...
- Bootstrap3 表单
表单 Bootstrap 为表单和表单控件提供了一些全局样式,不需要添加任何辅助类,即可让表单使用默认布局.默认布局中,表单元素采用垂直布局,标签和输入框采用顶对齐方式. Bootstrap 中创建表 ...
最新文章
- 他676分考上清华却没微信,看到他的手机后大家沉默了
- Python集成网络诊断小工具(含有ping,tracert,tcping等小工具)
- 5款常见原型工具,产品特色知多少?
- LDAP 配置 ldap_bind: Invalid credentials (49)
- 贝叶斯统计:Tweedie公式及其证明
- 汉诺塔(Tower of Hanoi) 递归代码实现 c语言(顺序栈实现)
- Majority Element(169) Majority Element II(229)
- js程序中美元符号$是什么
- github图---小章鱼图标
- go语言io reader_Go语言中的io.Reader和io.Writer以及它们的实现
- vue NoData
- 算法不会,尚能饭否之排序——折半插入排序(Binary Insert Sort)
- 凯立德地图导航2020年最新版_曾是导航领域“领头羊”的凯立德,如今为何岌岌可危?...
- displaytag用法一
- 软件工程教程:第3章需求分析 课后习题
- 时间复杂度和空间复杂度OvO
- xxl子任务_XXL-JOB(1) 分布式任务系统选型和XXL-JOB介绍
- 数据建模 --- 概念建模+逻辑建模+物理建模
- 【定位问题】基于matlab TDOA+taylor算法移动基站无源定位【含Matlab源码 2098期】
- storm如何部署拓扑