当前位置:   article > 正文

【Node Red 】 mysql数据库节点介绍_node-red 数据库

node-red 数据库

目录

1、介绍

2、数据库

3、Node Red中mysql节点介绍

3.1插入单条数据

1、SQL语句学习

2、插入单个数据

4、完整的测试代码


1、介绍

     在之前工作项目中,有这样的项目需求:比如一台自动化设备,内部控制器支持mdobus TCP协议,我们需要与该设备进行数据通讯,采集设备内部生产工艺数据,并将数据传给第三方平台。当时我们的做法是采物联网关、物联网盒子,通过盒子采集设备的数据,再将数据传给第三方平台,盒子网关一般是通过mqtt或者数据库的方式传给第三方平台,但是在Node Red中,就可以直接通过拖拉节点,编写少量的代码,读取设备数据,将数据写入数据库中,以供第三方平台调取数据,本文章主要讲解如何将数据写入mysql数据库中,对于编程基础薄弱的同学,可以利用工具GPT辅助编写,最终效果是可以实现的。

2、数据库

     这里以MySQL数据库为例,提前创建好表单,其余数据库可以参考,NodeRed支持数据库较多,可以根据需求下载测试。

dome测试数据库结构,仅供参考。

3、Node Red中mysql节点介绍

   该节点允许对 MySQL 数据库进行基本访问。对配置的数据库使用查询操作。允许插入和删除,SQL注入,所以需要小心使用。

msg.topic必须保存对数据库的查询,结果在 中返回。msg.payload

msg.payload可以包含要绑定到主题的值数组。

通常,返回的有效负载将是结果行的数组。: 这些是 RowDataPacket 类型,而不是完全标准的对象。如果未找到键,则返回 null,可以通过在设置中添加一行来更改以毫秒为单位的重新连接超时.js

3、插入数据

3.1插入单条数据

1、SQL语句学习

INSERT INTO 语句

INSERT INTO 语句用于向表格中插入新的行。

语法

INSERT INTO 表名称 VALUES (值1, 值2,....)

我们也可以指定所要插入数据的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

2、插入单个数据

下面就是由GPT写的,已验证ok,function节点

  1. // 获取当前的计数值或设定初始值为0
  2. var count = context.get('count') || 0;
  3. // 递增计数值
  4. count++;
  5. // 获取最新时间,存储在timestamp
  6. const timestamp = Math.floor(Date.now() / 1000);
  7. const formattedDate = new Date(timestamp * 1000).toISOString().slice(0, 19).replace('T', ' ');
  8. // 更新计数值
  9. context.set('count', count);
  10. // 将计数值作为消息的新属性(例如:id)
  11. var id = count;
  12. var datatype = "Int16";
  13. var keypad = "大家好";
  14. var value = "666";
  15. var SQL = "INSERT INTO mytab2(id, datatype, keypad, value, time) VALUES(?, ?, ?, ?, ?)";
  16. // 返回更新后的消息
  17. msg.topic = SQL;
  18. msg.payload = [id, datatype, keypad, value, formattedDate]; // 使用格式转换后的日期时间字符串
  19. return msg;

需要注意这里的表单,id作为主键,需要保证唯一性,我们重启node RED之后,id会重新排序,导致刚开始的数据会报错,无法写入数据库,方法由两种

1、一直注入数据,当id不重复之后,数据就会写入成功。

2、将数据库表单的数据进行截单,也就是清楚表格数据。

测试写入的数据。

4、完整的测试代码

  1. [
  2. {
  3. "id": "7a19bfb7be8b5d8b",
  4. "type": "inject",
  5. "z": "17ce5a554745ca34",
  6. "name": "",
  7. "props": [
  8. {
  9. "p": "payload"
  10. },
  11. {
  12. "p": "topic",
  13. "vt": "str"
  14. }
  15. ],
  16. "repeat": "",
  17. "crontab": "",
  18. "once": false,
  19. "onceDelay": 0.1,
  20. "topic": "",
  21. "payload": "",
  22. "payloadType": "date",
  23. "x": 170,
  24. "y": 540,
  25. "wires": [
  26. [
  27. "8bcfb951389664b4"
  28. ]
  29. ]
  30. },
  31. {
  32. "id": "b9e22fc6c0c339e3",
  33. "type": "mysql",
  34. "z": "17ce5a554745ca34",
  35. "mydb": "159305cc4ba5d756",
  36. "name": "mysql",
  37. "x": 770,
  38. "y": 540,
  39. "wires": [
  40. []
  41. ]
  42. },
  43. {
  44. "id": "8bcfb951389664b4",
  45. "type": "function",
  46. "z": "17ce5a554745ca34",
  47. "name": "function 2",
  48. "func": "// 获取当前的计数值或设定初始值为0\nvar count = context.get('count') || 0;\n\n// 递增计数值\ncount++;\n// 获取最新时间,存储在timestamp\nconst timestamp = Math.floor(Date.now() / 1000);\nconst formattedDate = new Date(timestamp * 1000).toISOString().slice(0, 19).replace('T', ' ');\n// 更新计数值\ncontext.set('count', count);\n\n// 将计数值作为消息的新属性(例如:id)\nvar id = count;\nvar datatype = \"Int16\";\nvar keypad = \"大家好\";\nvar value = \"666\";\nvar SQL = \"INSERT INTO mytab2(id, datatype, keypad, value, time) VALUES(?, ?, ?, ?, ?)\";\n\n// 返回更新后的消息\nmsg.topic = SQL;\nmsg.payload = [id, datatype, keypad, value, formattedDate]; // 使用格式转换后的日期时间字符串\nreturn msg;",
  49. "outputs": 1,
  50. "timeout": 0,
  51. "noerr": 0,
  52. "initialize": "",
  53. "finalize": "",
  54. "libs": [],
  55. "x": 480,
  56. "y": 740,
  57. "wires": [
  58. [
  59. "b9e22fc6c0c339e3"
  60. ]
  61. ]
  62. },
  63. {
  64. "id": "159305cc4ba5d756",
  65. "type": "MySQLdatabase",
  66. "name": "test",
  67. "host": "192.168.1.202",
  68. "port": "3306",
  69. "db": "test",
  70. "tz": "",
  71. "charset": "UTF8"
  72. }
  73. ]
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/218055?site
推荐阅读
相关标签
  

闽ICP备14008679号