npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

zwh-node-mysql-promise

v0.1.0

Published

node mysql model based on promise

Downloads

19

Readme

node-mysql-promise

Install

$ npm install node-mysql-promise

Introduction

node mysql操作封装类,基于promise,借鉴75team开源项目thinkjs中model操作,数据库连接使用node-mysql的连接池。

使用示例

var Mysql = require('node-mysql-promise');
var mysql = Mysql.createConnection({
	host        : 'localhost',
	user        : 'username',
	password    : 'password'
});
//SELECT * FROM table;
mysql.table('table').select().then(function (data) {
	console.log(data);
}).catch(function (e) {
	console.log(e);
});

##API

配置

  • host: 连接的host(默认: localhost)
  • port: 连接端口
  • user: 用户名
  • password: 密码
  • database: 数据库名
  • tablePrefix: 数据表前缀
  • charset: 编码(默认: UTF8_GENERAL_CI)
  • timezone: 时区(默认: 'local')
  • connectTimeout: 连接超时时间(默认: 10000)
  • connectionLimit: 最大连接数(默认: 10)
  • logSql: 控制台输出sql(默认: false)

方法

table(tableName)

设置要查询的表(必需)

  • tableName String 要查询的表
  • return this
//SELECT * FROM `table`
mysql.table('table').select()

field(field, reverse)

设置要查询的字段

  • field String|Array 要查询的字段,可以是字符串,也可以是数组
  • reverse Boolean 是否反选字段
  • return this
//SELECT * FROM `table`
mysql.table('table').field().select();
//SELECT `id`, `title` FROM `table`
mysql.table('table').field('id, title').select();
//SELECT `id`, `title` FROM `table`
mysql.table(['id', 'title']).select();
//SELECT `author`, `date` FROM `table`
mysql.table('table').field(['id', 'title'], true).select();

limit(offset, length)

设置查询的数量

  • offset Number 起始位置
  • length Number 查询的数目
  • return this
//SELECT * FROM `table` LIMIT 10
mysql.table('table').limit(10).select();
//SELECT * FROM `table` LIMIT 10, 20
mysql.table('table').limit(10, 20).select();

page(page, listRows)

设置当前查询的页数,页数从1开始

  • page Number 当前的页数
  • listRows Number 一页记录条数,默认20条
  • return this
//SELECT * FROM `table`
mysql.table('table').page().select();
//SELECT * FROM `table` LIMIT 0,20
mysql.table('table').page(1).select();
//SELECT * FROM `table` LIMIT 10, 20
mysql.table('table').page(2, 10).select();

union(union, all)

联合查询

  • union String 联合查询的字符串
  • all 是否为UNION ALL模式
  • return this
//SELECT * FROM `table` UNION (SELECT * FROM `table2`)
mysql.table('table').union('SELECT * FROM `table2`').select();
//SELECT * FROM `table` UNION ALL (SELECT * FROM `table2`)
mysql.table('table').union('SELECT * FROM `table2`', true).select();
//SELECT * FROM `table` UNION ALL (SELECT * FROM `table2`)
mysql.table('table').union({table: 'table2'}, true);
//SELECT * FROM `table` UNION ALL (SELECT * FROM `table2`) UNION (SELECT * FROM `table3`)
mysql.table('table').UNION({table: 'table2`}, true).union({table: 'table3'});

join(join)

组合查询

  • join String|Array|Object
  • return this
//SELECT * FROM `table` LEFT JOIN `table2` ON table.id = table2.id
mysql.table('table').join('table2 on table.id = table2.id').select();
//SELECT * FROM `table` LEFT JOIN `table2` ON table.id = table2.id RIGHT JOIN `table3` ON table.sid = table3.sid
mysql.table('table').join('table2 ON table.id = table2.id', 'RIGHT JOIN table3 ON table.sid = table3.sid').select();
//SELECT * FROM `table` INNER JOIN `table2` on table.id = table2.id
mysql.table('table').join({
	table: 'table2',
	join: 'inner',//left, right, inner三种方式
	as: 'c' //表别名
	on: ['id', 'id'] //ON 条件
}).select();
//SELECT * FROM `table` AS a LEFT JOIN `table2` AS b ON a.id = b.id LEFT JOIN `table3` AS c ON a.sid = c.sid
mysql.table('table').alias('a').join({
	table: 'table2',
	join: 'left',
	as: 'b'
	on: ['id', 'id']
}).join({
	table: 'table3',
	join: 'left',
	as: 'c',
	on: ['sid', 'sid']
}).select();		
//SELECT * FROM `table` AS a LEFT JOIN `table2` AS b ON a.id = b.id LEFT JOIN `table3` AS c ON a.sid = c.sid
mysql.table('table').join({
	table2: {
		join: 'left',
		as: 'b',
		on: ['id', 'id']
	},
	table3: {
		join: 'left',
		as: 'c',
		on: ['sid', 'sid']
	}
}).select();		
//SELECT * FROM `table` LEFT JOIN `table2` ON table.id = table2.id LEFT JOIN `table3` ON (table.sid = table3.sid AND table.name = table3.title);
mysql.table('table').join({
	table2: {
		on: ['id', 'id']
	},
	table3: {
		on: {
			id: 'id',
			title: 'name'
		}
	}
}).select();

order(order)

设置排序方式

  • order String|Array|Obeject 排序方式
  • return this
//SELECT * FROM `table` ORDER BY `id`
mysql.table('table').order('id').select();		
//SELECT * FROM `table` ORDER BY `id` DESC
mysql.table('table').order('id DESC').select();
//SELECT * FROM `table` ORDER BY `id` DESC, `title` ASC
mysql.table('table').order('id DESC, title ASC').select();
//SELECT * FROM `table` ORDER BY `id` DESC, `title` ASC
mysql.table('table').order(['id DESC', 'title ASC']).select();
//SELECT * FROM `table` ORDER BY `id` DESC `title` ASC
mysql.table('table').order({id: 'DESC', title: 'ASC'}).select();

alias(alias)

设置表别名

  • alias String 表别名
  • return this
//SELECT * FROM `table` AS t
mysql.table('table').alias('t').select();

having(str)

having查询

  • str String having查询的字符串
  • return this
//SELECT * FROM `table` HAVING `id` > 1 AND `id` < 100
mysql.table('table').having('id > 1 AND id < 100').select();

group(field)

分组查询

  • field String 设定分组查询的字段
  • return this
//SELECT * FROM `table` GROUP BY `date`
mysql.table('table').group('date').select();

distinct(field)

去重查询

  • field String 去重的字段
  • return this
//SELECT DISTINCT `title` FROM `table`
mysql.table('table').distinct('title').select();

where(where)

设置where条件

  • where Sting|Object 查询条件
  • return this
普通条件
//SELECT * FROM `table` WHERE `id` = 100;
mysql.table('table').where('id = 100').select();
//SELECT * FROM `table` WHERE `id` = 100;
mysql.table('table').where({id: 100}).select();
//SELECT * FROM `table` WHERE `id` = 100 OR `id` < 2
mysql.table('table').where('id = 100 OR id < 2').select();
//SELECT * FROM `table` WHERE `id` != 100
mysql.table('table').where({id: ['!=', 100]})
EXP条件

默认会对字段和值进行转义,如果不希望被转义,可是使用EXP的方式

//SELECT * FROM `table` WHERE `name` = 'name'
mysql.table('table').where({name: ['EXP', "='name'"]}).select();
//UPDATE `table` SET `num' = `num`+1
mysql.table('table').update({num: ['EXP', 'num+1']});
LIKE条件
//SELECT * FROM `table` WHERE (`title` NOT LIKE 'title')
mysql.table('table').where({title: ['NOT LIKE', 'title']}).select();
//SELECT * FROM `table` WHERE (`title` LIKE '%title%')
mysql.table('table').where({title: ['LIKE', '%title%']}).select();
//LIKE多个值
//SELECT * FROM `table` WHERE (`title` LIKE 'title' OR `title` LIKE 'name')
mysql.table('table').where({title: ['LIKE', ['title', 'name']]}).select();
//多个字段LIKE同一个值,OR的关系
//SELECT * FROM `table` WHERE ((`title` LIKE '%title%') OR (`content` LIKE '%title%'))
mysql.table('table').where({'title|content': ['LIKE', '%title%']}).select();
//多个字段LIKE同一个值,AND的关系
//SELECT * FROM `table` WHERE ((`title` LIKE '%title%') AND (`content` LIKE '%title%'))
mysql.table('table').where({'title&content': ['LIKE', '%title%']}).select();
IN条件
//SELECT * FROM `table` WHERE (`id` IN (1,2,3))
mysql.table('table').where({id: ['IN', '1, 2, 3']}).select();
//SELECT * FROM `table` WHERE (`id` IN (1, 2, 3))
mysql.table('table').where({id: ['IN', [1, 2, 3]]}).select();
//SELECT * FROM `table` WHERE (`id` NOT IN (1, 2, 3))
mysql.table('table').where({id: ['NOT IN', [1, 2, 3]]}).select();
多字段查询
//SELECT * FROM `table` WHERE (`id` = 10) AND (`title` = 'title')
mysql.table('table').where({id: 10, title: 'title'}).select();
//OR
//SELECT * FROM `table` WHERE (`id` = 10) OR (`title` = 'title')
mysql.table('table').where({id: 10, title: 'title', _logic: 'OR'}).select();
//XOR
//SELECT * FROM `table` WHERE (`id` = 10) XOR (`title` = 'title')
mysql.table('table').where({id: 10, title: 'title', _logic: 'XOR'}).select();
BETWEEN
//SELECT * FROM `table` WHERE (`id` BETWEEN 1 AND 2)
mysql.table('table').where({id: ['BETWEEN', 1, 2]}).select();
//SELECT * FROM `table` WHERE (`id` BETWEEN 1 AND 2)
mysql.table('table').where({id: ['BETWEEN', '1,2']}).select();
复合查询
//SELECT * FROM `table` WHERE `id` > 10 AND `id` < 20
mysql.table('table').where({id: {
	'>': 10,
	'<': 20
}}).select();
//SELECT * FROM `table` WHERE `id` < 10 OR `id` > 20
mysql.table('table').where({id: {
	'<': 10,
	'>': 20,
	_logic: 'OR'
}}).select();
//SELECT * FROM `table` WHERE (`id` > 10 AND `id` < 20) OR (`title` LIKE '%title%')
mysql.table('table').where({id: {
	'>': 10,
	'<': 20
}, title: ['LIKE', '%title%']}).select();
//SELECT * FROM `table` WHERE (`title` = 'title') AND ((`id` IN (1, 2, 3)) OR (`content` = 'content'))
mysql.table('table').where({
	title: 'title',
	_complex: {
		id: ['IN', [1, 2, 3]],
		content: 'content',
		_logic: 'OR'
	}
}).select();

count(field)

查询符合条件的数目

  • field String count的字段
  • return promise
//SELECT COUNT(`id`) FROM `table` LIMIT 1
mysql.table('table').count('id').then(function (count) {
	//count为符合条件的数目		
})

sum(field)

求和

  • field String 要求和的字段
  • return promise
//SELECT SUM(`num`) FROM `table` LIMIT 1
mysql.table('table').sum('num').then(function (sum) {
	//sum为求和的值	
});

max(field)

求字段的最大值

  • field String 要求最大值的字段
  • return promise
//SELECT MAX(`num`) FROM `table` LIMIT 1
mysql.table('table').max('num').then(function (max) {	//max为num的最大值
});

min(field)

求字段的最小值

  • field String 要求最小值的字段
  • return promise
//SELECT MIN(`num`) FROM `table` LIMIT 1
mysql.table('table').min('num').then(function (min) {
	//min为num的最小值	
})

avg(field)

求字段的平均值

  • field Sting 要求平均值的字段
  • return promise
//SELECT AVG(`num`) FROM `table` LIMIT 1;
mysql.table('table').avg('num').then(function (avg) {
	//avg为num的平均值	
})

add(data)

插入数据

  • data Object 要插入的数据
  • return promise
var data  = {
	title: 'title',
	content: 'content'
};
mysql.table('table').add(data).then(function (insertId) {
	//如果插入成功,返回插入的id
	}).catch(function (err) {
		//插入失败,err为具体的错误信息
	})

thenAdd(data, where, returnDetail)

当数据表中不存在where条件对应的数据时才进行插入

  • data Object 要插入的数据
  • where String|Array|Object 检测的条件
  • returnDetail Boolean 是否返回详细的信息
//假设字段title为UNIQUE
var data = {
	title: 'title',
	content: 'content'
};
var where = {
	title: 'title'
}
mysql.table('table').thenAdd(data, where).then(function (id) {
	//返回已经存在或者刚插入的id
})		
//返回详细信息
mysql.table('table').thenAdd(data, where, true).then(function (data) {
	/*
	data数据结构为
	{
		type: 'exist' || 'add',  //exist表示已存在,add新增
		id: 1
	}
	*/	
})

addAll(data)

一次添加多条数据

  • data Array
  • return promise
var data = [{title: 'xxx'}, {title: 'yyy'}];
mysql.table('table').addAll(data).then(function (insertId) {
	//插入成功
}).catch(function (err) {
	//插入失败
})

delete()

删除数据

  • return promise
//删除所有数据
mysql.table('table').delete().then(function (affectRows) {
	//返回影响行数
})		
//删除符合条件的数据
mysql.table('table').where(where).delete().then(functino (affectRows) {
	//返回影响的行数
})

update(data)

更新数据,需要条件

  • data Object 要更新的数据
  • return promise
mysql.table('table').where(where).update(data).then(function (affectRows) {
	//返回影响行数
})

select()

查询符合条件的数据

  • return promise
mysql.table('table').where(where).select().then(function (data) {
	//返回结果 Array
})

find()

查找一条符合条件的数据

  • return promise
mysql.table('table').where(where).find().then(function (data) {
	//返回结果 Object
})

updateInc(field, step)

字段值增加

  • field String 要增加的字段
  • step Number 增加的数值,默认为1
  • return promise
//将id为1的num字段加10
mysql.table('table').where({id: 1}).updateInc('num', 10).then(function () {
})

updateDec(field, step)

字段值减少

  • field String 要减少的字段
  • step Number 减少的数字,默认为1
  • return promise
//将id为1的num字段值减10
mysql.table('table').where({id: 1}).updateDec('num', 10).then(function () {
})

getField(field, onlyOne)

获取某个字段的值

  • field String 要获取的字段,可以是多个字段(用,隔开)
  • onlyOne Boolean|Array 是否只需要一个值,或者是需要几个值
//取id>100的id集合
mysql.table('table').where({id: ['>', 100]}).getField('id').then(function (data) {
	//data为Array,是符合结果的所有集合
	//data = [101, 102, 103, 104]
})		
//只需要id>100的一个值
mysql.table('table').where({id: ['>': 100]}).getField('id', true).then(function (data) {
	//data为数字,符合条件的第一个值
	//data = 101
})
//只需要id>100的3个值
mysql.table('table').where({id: ['>' 100]}).getField('id', 3).then(function (data) {
	//data为Array
	//data = [101, 102, 103]
})
//需要id和title两个字段的值
mysql.table('table').getField('id, title').then(function (data) {
	//data为对象
	/*
	data = {
		id: [101, 102, 103, 104],
		title: ['aaaa', 'bbbb', 'cccc', 'dddd']
	}
	*/
})

countSelect(options, flag)

  • options 查询参数
  • flag Boolean 当分页值不合法的时候,处理情况。true为修正到第一页,false为修正到最后一页,默认不进行修正
  • return promise
//查询1-20条数据
mysql.table('table').page(1, 20).countSelect().then(function (data) {
	//data数据格式
	data = {
		count: 123, //总条数
		total: 7    //总页数
		page: 1     //当前页
		num: 20     //每页显示数量
		data: [{}, {}] //详细数据
	}
});

startTrans()

开启事务 支持select countSelect update delete add 还有options参数的等操作

	let t = await mysql.startTrans()

	//在options添加trans
	let select1 = await mysql.table("test_t_1").select({
            trans: t
        });
	//在options添加trans
	let update1 = await mysql.table("test_t_1").add({
            id: "123",
            test1: "test1",
            test2: "test2",
        },{
            trans: t
        })
	await mysql.commit(t)
	

commit(t)

提交事务

	await mysql.commit(t)

rollback(t)

回滚事务

	await mysql.rollback(t)

query(sql, parse)

自定义sql语句进行查询

  • sql String 要执行的sql语句
  • parse 格式参数的数据
  • return promise
var data = [
	'*',
	'table',
	'id > 100'
]	
mysql.query('SELECT %s FROM %s WHERE %s', data).then(function (data) {
})

execute(sql, parse)

自定义sql语句执行,使用与query相同,返回数据不同,execute返回影响行数

close()

关闭连接池连接,非特殊情况,不建议使用