mm_mysql 1.9.0 → 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.js +161 -12
  2. package/package.json +33 -37
  3. package/test.js +174 -132
package/index.js CHANGED
@@ -11,6 +11,7 @@ const {
11
11
  } = require('./db');
12
12
 
13
13
  const Link_model = require('./link_model');
14
+ const { table } = require('console');
14
15
 
15
16
  var pool = {};
16
17
 
@@ -80,7 +81,7 @@ class Mysql {
80
81
  * @param {Array} val 替换值
81
82
  * @return {Promise|Array} 异步构造器, 当await时返回执行结果
82
83
  */
83
- this.run = function(sql, val) {
84
+ this.run = function (sql, val) {
84
85
  var _this = this;
85
86
  this.sql = sql;
86
87
  if ($this.config.log) {
@@ -89,7 +90,7 @@ class Mysql {
89
90
 
90
91
  // 返回一个 Promise
91
92
  return new Promise((resolve, reject) => {
92
- $this.conn.getConnection(function(err, db) {
93
+ $this.conn.getConnection(function (err, db) {
93
94
  if (err) {
94
95
  _this.error = {
95
96
  code: 2003,
@@ -131,7 +132,7 @@ class Mysql {
131
132
  * @param {Array} val 替换值
132
133
  * @return {Promise|Array} 异步构造器, 当await时返回执行结果
133
134
  */
134
- this.exec = function(sql, val) {
135
+ this.exec = function (sql, val) {
135
136
  var _this = this;
136
137
  if (this.task) {
137
138
  this.task_sql += sql + "\r\n";
@@ -153,7 +154,7 @@ class Mysql {
153
154
  }
154
155
  // 返回一个 Promise
155
156
  return new Promise((resolve, reject) => {
156
- $this.conn.getConnection(function(err, db) {
157
+ $this.conn.getConnection(function (err, db) {
157
158
  if (err) {
158
159
  _this.error = {
159
160
  code: 41000,
@@ -182,7 +183,7 @@ class Mysql {
182
183
  if (o.constructor == Array) {
183
184
  if (o.length > 0) {
184
185
  var num = 0;
185
- o.map(function(item) {
186
+ o.map(function (item) {
186
187
  num += item['affectedRows'];
187
188
  });
188
189
  if (num === 0) {
@@ -213,21 +214,169 @@ class Mysql {
213
214
  /**
214
215
  * @description 获取数据库管理器
215
216
  */
216
- this.db = function() {
217
+ this.db = function () {
217
218
  return new DB($this);
218
219
  };
219
220
  }
220
221
  }
221
222
 
223
+ /**
224
+ * 导入数据库
225
+ * @param {Object} file sql文件
226
+ * @param {Function} func 回调函数
227
+ * @return {Promise} 异步构造器, 当await时返回执行结果
228
+ */
229
+ Mysql.prototype.load = async function (file, func) {
230
+ var count = 0;
231
+ var progress = 0;
232
+ var errors = [];
233
+ var index = 0;
234
+ try {
235
+ var data = file.loadText();
236
+ // 将SQL文件内容分割成单独的语句
237
+ const arr = data.split(';\r\n');
238
+ count = arr.length;
239
+ for (var i = 0; i < arr.length; i++) {
240
+ var sql_str = arr[i].trim();
241
+ if (sql_str !== '') {
242
+ await this.run(sql_str + ";");
243
+ if (this.error) {
244
+ errors.push({
245
+ sql_str: sql_str.slice(0, 512),
246
+ error: this.error
247
+ });
248
+ // 如果数据库链接失败(密码错误或无法连接),则退出循环
249
+ if (this.error.code == 1045 || this.error.code == 2003) {
250
+ break;
251
+ }
252
+ }
253
+ }
254
+ var p = i / arr.length;
255
+ progress = Math.ceil(p * 100);
256
+ index = i;
257
+ if (func) {
258
+ func(progress, index, this.error, sql_str);
259
+ }
260
+ }
261
+ } catch (err) {
262
+ $.log.error("导入SQL文件失败!", err);
263
+ }
264
+ return {
265
+ index,
266
+ count,
267
+ progress,
268
+ errors
269
+ }
270
+ };
271
+
272
+ /**
273
+ * 保存数据库为文件
274
+ * @param {String} file 文件对象
275
+ * @param {Function} func 回调函数
276
+ * @return {Promise} 异步构造器, 当await时返回执行结果
277
+ */
278
+ Mysql.prototype.save = async function (file, func, tables = []) {
279
+ const fs = require('fs');
280
+ const stream = fs.createWriteStream(file);
281
+ let count = 0;
282
+ let progress = 0;
283
+ let errors = [];
284
+ let index = 0;
285
+ let tableCount = 0;
286
+
287
+ try {
288
+ // 开始导出数据库
289
+ stream.write('SET FOREIGN_KEY_CHECKS = 0;\r\n\r\n');
290
+ count++;
291
+
292
+ if(!tables.length) {
293
+ // 获取所有表
294
+ var tbs = await this.run('SHOW TABLES');
295
+ tables = tbs.map((item) => {
296
+ return item[Object.keys(item)[0]];
297
+ });
298
+ }
299
+
300
+ tableCount = tables.length;
301
+ console.log("tables", tables);
302
+ for (var i = 0; i < tables.length; i++) {
303
+ var tableName = tables[i];
304
+ try {
305
+ // 导出表结构
306
+ const createTable = await this.run(`SHOW CREATE TABLE ${tableName}`);
307
+ stream.write(`-- 表结构: ${tableName}\r\n`);
308
+ stream.write(`DROP TABLE IF EXISTS \`${tableName}\`;\r\n`);
309
+ count++;
310
+ stream.write(`${createTable[0]['Create Table']};\r\n\r\n`);
311
+ count++;
312
+ // 导出表数据
313
+ const rows = await this.run(`SELECT * FROM ${tableName}`);
314
+ if (rows.length > 0) {
315
+ stream.write(`-- 表数据: ${tableName}\r\n`);
316
+ for (const row of rows) {
317
+ const rowValues = Object.values(row)
318
+ .map(value => {
319
+ if (value === null) return 'NULL';
320
+ if (typeof value === 'boolean') return value ? 1 : 0;
321
+ if (typeof value === 'number') return value;
322
+ if (value instanceof Date) {
323
+ return "'" + value.toStr('yyyy-MM-dd hh:mm:ss') + "'";
324
+ }
325
+ // 处理字符串,转义特殊字符
326
+ return "'" + value.toString()
327
+ .replace(/[\\']/g, '\\$&')
328
+ .replace(/\n/g, '\\n')
329
+ .replace(/\r/g, '\\r')
330
+ .replace(/\t/g, '\\t')
331
+ .replace(/\u0000/g, '\\0') + "'";
332
+ })
333
+ .join(',');
334
+ stream.write(`INSERT INTO ${tableName} VALUES (${rowValues});\r\n`);
335
+ count++;
336
+ }
337
+ stream.write('\r\n');
338
+ }
339
+ } catch (err) {
340
+ errors.push({
341
+ table: tableName,
342
+ error: err.message
343
+ });
344
+ }
345
+
346
+ index++;
347
+ progress = Math.ceil((index / tableCount) * 100);
348
+ if (func) {
349
+ func(progress, index, this.error, tableName);
350
+ }
351
+ }
352
+
353
+ // 完成导出
354
+ stream.write('SET FOREIGN_KEY_CHECKS = 1;\r\n');
355
+ count++;
356
+ stream.end();
357
+ } catch (err) {
358
+ $.log.error("导出SQL文件失败!", err);
359
+ stream.end();
360
+ }
361
+
362
+ return {
363
+ tableCount,
364
+ index,
365
+ count,
366
+ progress,
367
+ errors
368
+ }
369
+ };
370
+
222
371
  /**
223
372
  * 获取数据库管理器
224
373
  * @param {String} key 主键
225
- * @param {String|Number} value 对象值
374
+ * @param {String|Number} value 对象值
226
375
  * @param {Boolean} clear_prefix 清除前缀
227
376
  * @param {Array} arr_table 关联的数据表
228
377
  * @return {Object} 管理模型
229
378
  */
230
- Mysql.prototype.dbs = async function(key, value, clear_prefix, ...arr_table) {
379
+ Mysql.prototype.dbs = async function (key, value, clear_prefix, ...arr_table) {
231
380
  var lm = new Link_model({
232
381
  key,
233
382
  value,
@@ -244,9 +393,9 @@ Mysql.prototype.dbs = async function(key, value, clear_prefix, ...arr_table) {
244
393
  * 设置配置参数
245
394
  * @param {Object} cg 配置对象或配置路径
246
395
  */
247
- Mysql.prototype.setConfig = function(cg) {
396
+ Mysql.prototype.setConfig = function (cg) {
248
397
  var obj;
249
- if (typeof(cg) === "string") {
398
+ if (typeof (cg) === "string") {
250
399
  obj = cg.loadJson(this.dir);
251
400
  } else {
252
401
  obj = cg;
@@ -259,7 +408,7 @@ Mysql.prototype.setConfig = function(cg) {
259
408
  * @description 打开数据库, 如果没有则建立数据库连接再打开
260
409
  * @param {boolean} 是否重置
261
410
  */
262
- Mysql.prototype.open = function(reset) {
411
+ Mysql.prototype.open = function (reset) {
263
412
  if (reset || !this.state || !pool[this.identifier]) {
264
413
  this.state = 1;
265
414
  pool[this.identifier] = createPool(this.config);
@@ -270,7 +419,7 @@ Mysql.prototype.open = function(reset) {
270
419
  /**
271
420
  * @description 关闭连接
272
421
  */
273
- Mysql.prototype.close = function() {
422
+ Mysql.prototype.close = function () {
274
423
  if (pool[this.identifier]) {
275
424
  pool[this.identifier].end();
276
425
  pool[this.identifier] = null;
package/package.json CHANGED
@@ -1,37 +1,33 @@
1
- {
2
- "name": "mm_mysql",
3
- "version": "1.9.0",
4
- "description": "这是超级美眉mysql帮助函数模块,用于便捷操作mysql,使用await方式,可以避免嵌套函数",
5
- "main": "index.js",
6
- "dependencies": {
7
- "mm_logs": "^1.1.6",
8
- "mysql": "^2.18.1"
9
- },
10
- "scripts": {
11
- "test": "node test.js",
12
- "dev": "nodemon test.js"
13
- },
14
- "author": "邱文武",
15
- "license": "ISC",
16
- "repository": {
17
- "type": "git",
18
- "url": "git+https://github.com/qiuwenwu/mm_mysql.git"
19
- },
20
- "keywords": [
21
- "mysql",
22
- "async",
23
- "await",
24
- "promise",
25
- "add",
26
- "del",
27
- "set",
28
- "get",
29
- "query",
30
- "run",
31
- "exec"
32
- ],
33
- "bugs": {
34
- "url": "https://github.com/qiuwenwu/mm_mysql/issues"
35
- },
36
- "homepage": "https://github.com/qiuwenwu/mm_mysql#readme"
37
- }
1
+ {
2
+ "name": "mm_mysql",
3
+ "version": "1.9.2",
4
+ "description": "这是超级美眉mysql帮助函数模块,用于便捷操作mysql,使用await方式,可以避免嵌套函数",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "node test.js",
8
+ "dev": "nodemon test.js"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://gitee.com/qiuwenwu91/mm_mysql.git"
13
+ },
14
+ "keywords": [
15
+ "mysql",
16
+ "async",
17
+ "await",
18
+ "promise",
19
+ "add",
20
+ "del",
21
+ "set",
22
+ "get",
23
+ "query",
24
+ "run",
25
+ "exec"
26
+ ],
27
+ "author": "qww",
28
+ "license": "ISC",
29
+ "dependencies": {
30
+ "mm_logs": "^1.1.7",
31
+ "mysql": "^2.18.1"
32
+ }
33
+ }
package/test.js CHANGED
@@ -1,5 +1,47 @@
1
1
  const Mysql = require('./index.js').Mysql;
2
2
 
3
+ /**
4
+ * 测试导入sql文件
5
+ */
6
+ async function test() {
7
+ var sql = new Mysql();
8
+ sql.setConfig({
9
+ database: 'test',
10
+ // 连接用户名
11
+ user: "root",
12
+ // 连接密码
13
+ password: "Asd159357",
14
+ multipleStatements: true
15
+ });
16
+ await sql.open();
17
+ // // 导入
18
+ // var ret = await sql.load("./data.sql".fullname(__dirname), function(progress, index, error, sql_str) {
19
+ // console.log("导入", progress, index, error, sql_str);
20
+ // });
21
+ // console.log("导入结果", ret);
22
+
23
+ // 导出指定表'user_account', 'user_info'
24
+ // var ret2 = await sql.save("./bat.sql".fullname(__dirname), function(progress, index, error, sql_str) {
25
+ // console.log("导出", progress, index, error, sql_str);
26
+ // }, ['user_account', 'user_info']);
27
+ // console.log("导出结果", ret2);
28
+
29
+ // // 导出
30
+ // var ret2 = await sql.save("./bat.sql".fullname(__dirname), function(progress, index, error, sql_str) {
31
+ // // console.log("导出", progress, index, error, sql_str);
32
+ // });
33
+ // console.log("导出结果", ret2);
34
+
35
+ // // 导入
36
+ // var ret = await sql.load("./bat.sql".fullname(__dirname), function(progress, index, error, sql_str) {
37
+ // // console.log("导入", progress, index, error, sql_str);
38
+ // });
39
+ // console.log("导入结果", ret);
40
+
41
+ sql.close();
42
+
43
+ }
44
+ test();
3
45
 
4
46
  // function test() {
5
47
  // var setSql = "`nickname`='hao,1,2,3',`gm`=5,`mc`=2,`group`='2,3'";
@@ -14,42 +56,42 @@ const Mysql = require('./index.js').Mysql;
14
56
  // });
15
57
  // sql.open();
16
58
 
17
- var tpl = {
18
- "query": {
19
- "state_min": "`state` >= '{0}'",
20
- "state_max": "`state` <= '{0}'",
21
- "vip_min": "`vip` >= '{0}'",
22
- "vip_max": "`vip` <= '{0}'",
23
- "gm_min": "`gm` >= '{0}'",
24
- "gm_max": "`gm` <= '{0}'",
25
- "mc_min": "`mc` >= '{0}'",
26
- "mc_max": "`mc` <= '{0}'",
27
- "create_time_min": "`create_time` >= '{0}'",
28
- "create_time_max": "`create_time` <= '{0}'",
29
- "login_time_min": "`login_time` >= '{0}'",
30
- "login_time_max": "`login_time` <= '{0}'",
31
- "salt": "`salt` like '%{0}%'",
32
- "invite_code": "`invite_code` like '%{0}%'",
33
- "phone": "`phone` like '%{0}%'",
34
- "username": "`username` like '%{0}%'",
35
- "nickname": "`nickname` like '%{0}%'",
36
- "password": "`password` like '%{0}%'",
37
- "email": "`email` like '%{0}%'",
38
- "user_group": "`user_group` like '%{0}%'",
39
- "user_admin": "`user_admin` like '%{0}%'",
40
- "login_ip": "`login_ip` like '%{0}%'",
41
- "signature": "`signature` like '%{0}%'",
42
- "avatar": "`avatar` like '%{0}%'",
43
- "friends": "`friends` like '%{0}%'",
44
- "admin_group": "`admin_group` like '%{0}%'"
45
- },
46
- "update": {
47
- "state_add": "`state` = `state` + '{0}'",
48
- "vip_add": "`vip` = `vip` + '{0}'",
49
- "gm_add": "`gm` = `gm` + '{0}'",
50
- "mc_add": "`mc` = `mc` + '{0}'"
51
- }
52
- };
59
+ // var tpl = {
60
+ // "query": {
61
+ // "state_min": "`state` >= '{0}'",
62
+ // "state_max": "`state` <= '{0}'",
63
+ // "vip_min": "`vip` >= '{0}'",
64
+ // "vip_max": "`vip` <= '{0}'",
65
+ // "gm_min": "`gm` >= '{0}'",
66
+ // "gm_max": "`gm` <= '{0}'",
67
+ // "mc_min": "`mc` >= '{0}'",
68
+ // "mc_max": "`mc` <= '{0}'",
69
+ // "create_time_min": "`create_time` >= '{0}'",
70
+ // "create_time_max": "`create_time` <= '{0}'",
71
+ // "login_time_min": "`login_time` >= '{0}'",
72
+ // "login_time_max": "`login_time` <= '{0}'",
73
+ // "salt": "`salt` like '%{0}%'",
74
+ // "invite_code": "`invite_code` like '%{0}%'",
75
+ // "phone": "`phone` like '%{0}%'",
76
+ // "username": "`username` like '%{0}%'",
77
+ // "nickname": "`nickname` like '%{0}%'",
78
+ // "password": "`password` like '%{0}%'",
79
+ // "email": "`email` like '%{0}%'",
80
+ // "user_group": "`user_group` like '%{0}%'",
81
+ // "user_admin": "`user_admin` like '%{0}%'",
82
+ // "login_ip": "`login_ip` like '%{0}%'",
83
+ // "signature": "`signature` like '%{0}%'",
84
+ // "avatar": "`avatar` like '%{0}%'",
85
+ // "friends": "`friends` like '%{0}%'",
86
+ // "admin_group": "`admin_group` like '%{0}%'"
87
+ // },
88
+ // "update": {
89
+ // "state_add": "`state` = `state` + '{0}'",
90
+ // "vip_add": "`vip` = `vip` + '{0}'",
91
+ // "gm_add": "`gm` = `gm` + '{0}'",
92
+ // "mc_add": "`mc` = `mc` + '{0}'"
93
+ // }
94
+ // };
53
95
 
54
96
  // // 测试模板修改
55
97
  // async function test_tpl_set() {
@@ -76,112 +118,112 @@ var tpl = {
76
118
  // }
77
119
  // test_tpl_set();
78
120
 
79
- async function test() {
80
- console.log('测试开始')
81
- var sql = new Mysql();
82
- var db = sql.db();
83
- // 是否输出语法
84
- // sql.config.log = false;
85
- // 忽视那些错误的输出,例如[1062],忽视主键重复插入
86
- // sql.config.log_ignore = [];
87
-
88
- sql.setConfig({
89
- "user": "root",
90
- "password": "Asd159357"
91
- });
92
- sql.open();
93
- // sql.close();
94
- // sql.open();
121
+ // async function test() {
122
+ // console.log('测试开始')
123
+ // var sql = new Mysql();
124
+ // var db = sql.db();
125
+ // // 是否输出语法
126
+ // // sql.config.log = false;
127
+ // // 忽视那些错误的输出,例如[1062],忽视主键重复插入
128
+ // // sql.config.log_ignore = [];
95
129
 
96
- // --- 测试事件 ---
97
- $.eventer.on("mysql_add_before:user_account", function(json) {
98
- console.log("添加前", json);
99
- });
100
- $.eventer.on("mysql_add_after:user_account", function(json) {
101
- console.log("添加后", json);
102
- });
103
- $.eventer.on("mysql_del_before:user_account", function(json) {
104
- console.log("删除前", json);
105
- });
106
- $.eventer.on("mysql_del_after:user_account", function(json) {
107
- console.log("删除后", json);
108
- });
109
- $.eventer.on("mysql_set_before:user_account", function(json) {
110
- console.log("修改前", json);
111
- });
112
- $.eventer.on("mysql_set_after:user_account", function(json) {
113
- console.log("修改后", json);
114
- });
115
- $.eventer.on("mysql_addOrSet_before:user_account", function(json) {
116
- console.log("添加或修改前", json);
117
- });
118
- $.eventer.on("mysql_addOrSet_after:user_account", function(json) {
119
- console.log("添加或修改后", json);
120
- });
121
- $.eventer.on("mysql_get_before:user_account", function(json) {
122
- console.log("查询列表前", json);
123
- });
124
- $.eventer.on("mysql_get_after:user_account", function(json) {
125
- console.log("查询列表后", json);
126
- });
127
- $.eventer.on("mysql_getObj_before:user_account", function(json) {
128
- console.log("查询对象前", json);
129
- });
130
- $.eventer.on("mysql_getObj_after:user_account", function(json) {
131
- console.log("查询对象后", json);
132
- });
130
+ // sql.setConfig({
131
+ // "user": "root",
132
+ // "password": "Asd159357"
133
+ // });
134
+ // sql.open();
135
+ // // sql.close();
136
+ // // sql.open();
133
137
 
134
- db.table = "user_account";
135
- db.key = "user_id,username";
136
- var obj = await db.getObj({
137
- user_id_has: "1"
138
- });
139
- obj.vip += 1;
138
+ // // --- 测试事件 ---
139
+ // $.eventer.on("mysql_add_before:user_account", function(json) {
140
+ // console.log("添加前", json);
141
+ // });
142
+ // $.eventer.on("mysql_add_after:user_account", function(json) {
143
+ // console.log("添加后", json);
144
+ // });
145
+ // $.eventer.on("mysql_del_before:user_account", function(json) {
146
+ // console.log("删除前", json);
147
+ // });
148
+ // $.eventer.on("mysql_del_after:user_account", function(json) {
149
+ // console.log("删除后", json);
150
+ // });
151
+ // $.eventer.on("mysql_set_before:user_account", function(json) {
152
+ // console.log("修改前", json);
153
+ // });
154
+ // $.eventer.on("mysql_set_after:user_account", function(json) {
155
+ // console.log("修改后", json);
156
+ // });
157
+ // $.eventer.on("mysql_addOrSet_before:user_account", function(json) {
158
+ // console.log("添加或修改前", json);
159
+ // });
160
+ // $.eventer.on("mysql_addOrSet_after:user_account", function(json) {
161
+ // console.log("添加或修改后", json);
162
+ // });
163
+ // $.eventer.on("mysql_get_before:user_account", function(json) {
164
+ // console.log("查询列表前", json);
165
+ // });
166
+ // $.eventer.on("mysql_get_after:user_account", function(json) {
167
+ // console.log("查询列表后", json);
168
+ // });
169
+ // $.eventer.on("mysql_getObj_before:user_account", function(json) {
170
+ // console.log("查询对象前", json);
171
+ // });
172
+ // $.eventer.on("mysql_getObj_after:user_account", function(json) {
173
+ // console.log("查询对象后", json);
174
+ // });
140
175
 
141
- await db.add(obj);
142
- console.log("尝试重复插入", db.error);
176
+ // db.table = "user_account";
177
+ // db.key = "user_id,username";
178
+ // var obj = await db.getObj({
179
+ // user_id_has: "1"
180
+ // });
181
+ // obj.vip += 1;
143
182
 
144
- // obj.vip -= 1;
145
- console.log("语法", db.sql, obj);
183
+ // await db.add(obj);
184
+ // console.log("尝试重复插入", db.error);
146
185
 
147
- obj.nickname = '管理员';
148
- // obj.vip -= 1;
149
- console.log("语法2", db.sql, obj);
186
+ // // obj.vip -= 1;
187
+ // console.log("语法", db.sql, obj);
150
188
 
151
- var list = await db.get({
152
- user_id_has: "1,2,a-3,4,5"
153
- });
154
- console.log("语法", db.sql, list.length);
189
+ // obj.nickname = '管理员';
190
+ // // obj.vip -= 1;
191
+ // console.log("语法2", db.sql, obj);
155
192
 
156
- var list = await db.get({
157
- user_id: "1"
158
- });
159
- console.log("查询语法", db.sql, list.length);
193
+ // var list = await db.get({
194
+ // user_id_has: "1,2,a-3,4,5"
195
+ // });
196
+ // console.log("语法", db.sql, list.length);
160
197
 
161
- var list = await db.get({
162
- user_id: "1"
163
- }, null, null, true);
164
- console.log("模糊查询语法", db.sql, list.length);
198
+ // var list = await db.get({
199
+ // user_id: "1"
200
+ // });
201
+ // console.log("查询语法", db.sql, list.length);
165
202
 
166
- var obj = await db.getObj({
167
- user_id_has: "1,2,a-3,4,5"
168
- });
169
- console.log("语法", db.sql, obj);
203
+ // var list = await db.get({
204
+ // user_id: "1"
205
+ // }, null, null, true);
206
+ // console.log("模糊查询语法", db.sql, list.length);
170
207
 
171
- var bl = await db.addOrSet({
172
- user_id: obj.user_id
173
- }, obj);
174
- console.log("语法", db.sql, bl);
175
-
176
- var obj = await db.getObj({}, "user_id desc");
177
- var obj_new = Object.assign({}, obj);
178
- obj_new.user_id += 1;
179
- var bl = await db.addOrSet({
180
- user_id: obj_new.user_id
181
- }, obj_new);
182
- console.log("语法", db.sql, bl);
183
- }
184
- test();
208
+ // var obj = await db.getObj({
209
+ // user_id_has: "1,2,a-3,4,5"
210
+ // });
211
+ // console.log("语法", db.sql, obj);
212
+
213
+ // var bl = await db.addOrSet({
214
+ // user_id: obj.user_id
215
+ // }, obj);
216
+ // console.log("语法", db.sql, bl);
217
+
218
+ // var obj = await db.getObj({}, "user_id desc");
219
+ // var obj_new = Object.assign({}, obj);
220
+ // obj_new.user_id += 1;
221
+ // var bl = await db.addOrSet({
222
+ // user_id: obj_new.user_id
223
+ // }, obj_new);
224
+ // console.log("语法", db.sql, bl);
225
+ // }
226
+ // test();
185
227
  // setInterval(() => {
186
228
  // test();
187
229
  // }, 3000)