2.0.26 • Published 3 months ago

greendb v2.0.26

Weekly downloads
4
License
MIT
Repository
github
Last release
3 months ago

greendb

Build Status Coverage Status

Install

npm install greendb
yarn add greendb

Usage

用作数据库迁移工具

# 需要全局安装
npm install -g greendb
# 从现有数据库生成数据库定义文件
greendb init -uroot -p123456 -h127.0.0.1 dbname
# 编辑数据库定义文件,修改或添加表定义
# 生成数据库升级sql
npm install greendb
greendb merge -uroot -p123456 dbname

详细介绍

通用参数:
	-u 指定数据库用户名, 如: -uroot 或 -u root
	-p 指定数据库密码, 如: -p123456 或 -p 123456
	-h 指定数据库host, 如: -hlocalhost 或 -h 127.0.0.1
	-f 指定数据库定义文件, 如: -f sql/greendb.js, 默认: greendb.js
根据已有数据库,生成数据库定义文件,如果文件已存在则停止,如果指定了--force则覆盖
	greendb init -uroot -p123456 dbname
***** 以下功能需要数据库定义文件 *****
生成升级sql,如果--force则会直接执行sql
	greendb merge -uroot -p123456 dbname
指定表格,生成接口定义的params
	greendb param table
生成typescript定义
	greendb ts outfile.d.ts
生成dart定义
	greendb dart outdir
指定表格,生成常用接口的定义和实现
	greendb api table --api apiPrefix

用作sql执行模块

async function test () {
	// 使用自带的mysql接口
	const db = greendb.createPool({
		user:'root',
		password:'123456',
		host:'127.0.0.1',
		database:'greendb',
		port: 3306,
		connectionLimit: 50,
		supportBigNumbers: false,
		bigNumberStrings: false,
		charset: "utf8mb4"
	});
	// 自己实现
	const db = greendb.createBuilder({
		/**
		 * 执行单条sql
		 * @param {string|{sql:string,args:any[]}} sql 
		 * @param {any[]} [args] 
		 * @returns {Promise<any>}
		 */
		SingleSQL(sql, args){},
		/**
		 * 执行单条/多条sql, 返回每条sql的结果
		 * @param {string|{sql:string,args:any[]}|(string|{sql:string,args:any[]})[]} sqls 
		 * @param {any[]} [args] 
		 * @returns {Promise<any|any[]>}
		 */
		execSQL(sqls, args){},
		// 关闭连接池
		/**
		 * @returns {Promise<any>}
		 */
		end(){}
	})
	
	// 插入数据,并获取插入后的id
	let user = { name: '张三', age: 18, sex: 'girl' }
	var id = await db.insert('user', user).id()

	// 更新数据
	await db.update('user', {name: '王麻子'}).where({id: 3});

	// 分页
	var {list, total} = await db.select('user', 'id uid,name').orderBy('age,id desc').limit(10, 20).page()

	// 如果不存在则插入数据
	await db.insertNotExist('user', user).where({name: '张三'})

	// 如果主键/唯一键不重复则插入,否则更新数据;  不指定keys则更新所有字段
	await db.insertOrUpdate('user', user, ['name', 'age', 'sex'])

	// 如果没有满足条件的数据则插入,否则更新数据
	await db.insertOrUpdate('user', user).where({age: 18})
}

用作sql构建模块

const greendb = require('./dist');

const db = greendb.createBuilder({})

// 插入数据,允许插入多个数据(数组)或单个数据(对象)
let users = [
	{ id:1, name: '张三', age: 18, sex: 'girl' },
	{ id:2, name: '李四', age: 88, sex: 'boy' },
]
var insert_sql = db.insert('user', users)
console.log(insert_sql.sql, insert_sql.args)
// insert into user (name,age,sex) values(?,?,?),(?,?,?) [ '张三', 18, 'girl', '李四', 88, 'boy' ]

// 更新数据
var update_sql = db.update('user', {name: '王麻子'}).where({id: 3});
console.log(update_sql.sql, update_sql.args)
// update user set name=? where  ( (id=?)) [ '王麻子', 3 ]

// 一个简单的查询
var sql = db.select('user').where('id', 1).where('login_at', null);
console.log(sql.sql, sql.args)
// select * from user where  (id=?) and (login_at is null) [ 1 ]

// where一个对象
var sql = db.select('user').where({
	age: 18,
	sex: "girl",
});
console.log(sql.sql, sql.args)
// select * from user where  ( (age=?) and (sex=?)) [ 18, 'girl' ]

// select指定字段并带有order by和limit
var sql = db.select('user', 'id uid,name').orderBy('age,id desc').limit(10, 20);
console.log(sql.sql, sql.args)
// select id uid,name from user order by age,id desc limit 10,20 []

// where(sql, args) 的详细用法
var sql = db.select('user')
// sql不带问号时,相当于 sql=?, args不是数组时,相当于 [args]
sql.where('id', 1)
sql.where('id', [1]) // 与上一句效果一样 
sql.where('id=?', [1]) // 与上一句效果一样 
// sql.where 实际是 db.where 的简化写法
sql.where('id in ?', [ [1, 2, 3] ])
sql.where(db.where('id in ?', [ [1, 2, 3] ])) // 与上句效果一样
sql.where('id in ?', [1, 2, 3] ) // 不能这样写
// 如果参数是一个对象,相当于对每一个键值对调用 sql.where
sql.where({
	age: 18,
	sex: "girl",
	"name like ?": "张%"
})
sql.where(`age=? and sex=? and name like ?`, [18, "girl", "张%"]) // 与上句效果一样
// 需要用 or 连接两个条件时,用orWhere, 
// 注意不管是where还是orWhere前面的条件不会被括号括起来, 如果要括起来, 需使用build
// 如: 原本是 (a=1) or (b=2)  在 sql.where('c=3') 后变成 (a=1) or (b=2) and (c=3)
//                          在 sql.build().where('c=3') 后变成 ((a=1) or (b=2)) and (c=3)
sql.orWhere(db.where('isadmin').and('login_at>?', [0]))
// 特别的,如果第二个参数 === null 时会变成 age is null
sql.where('age', null);
console.log(sql.sql, sql.args)
2.0.26

3 months ago

2.0.25

3 months ago

2.0.24

7 months ago

2.0.22

7 months ago

2.0.23

7 months ago

2.0.19

1 year ago

2.0.20

1 year ago

2.0.21

1 year ago

2.0.18

2 years ago

2.0.17

2 years ago

2.0.16

2 years ago

2.0.15

3 years ago

2.0.14

3 years ago

2.0.13

4 years ago

2.0.12

4 years ago

2.0.10

4 years ago

2.0.9

4 years ago

2.0.8

4 years ago

2.0.7

4 years ago

2.0.5

4 years ago

2.0.6

4 years ago

2.0.4

4 years ago

2.0.3

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

5 years ago

1.0.0

5 years ago