【问题标题】:How to put JSON object in MySQL database如何将 JSON 对象放入 MySQL 数据库
【发布时间】:2018-09-27 18:38:21
【问题描述】:

我正在从客户那里关注JSONObject

{
  "registerationId": 57502,
  "firstName": "Taha",
  "lastName": "Kirmani",
  "dob": "10-08-1988",
  "cnic": 4210137718361,
  "gender": "Male"
}

这就是我现在的解析方式。

app.post('/addUser', function (req, res) {

  var registrationId= req.body.registerationId; 
  var firstName= req.body.firstName; 
  var lastName= req.body.lastName; 
  var dob= req.body.dob; 


  //var randomQuery = connection.query('INSERT INTO students `COLUMN NAME` VALUES `VALUES NAME` //);
  // 


})

通过上述方法,我可以将数据放入MySQL database,但我正在寻找更有效的方法。

我想要做的是将jsonObject 传递给query,并将数据插入数据库中,所以我不会为每条路线执行req.body.id 步骤。

我正在寻找这样的东西;

   (insert into table (?) VALUES (?) , req.keys, req.values)

【问题讨论】:

    标签: mysql node.js express node-modules


    【解决方案1】:

    有多种方法可以解决这个问题。

    1. 使用 ORM 库。对象关系映射器或 ORM 是一个库,可以帮助您从关系数据库(如 MySQL)中存储和检索对象。它可以帮助您为您的用例创建正确的 SQL 字符串(无论是创建、读取、更新还是删除)。 Node.js 有很多可用的 ORM。这里有几个:BookshelfSequelizeObjection。 关于 ORM 的一些说明

      • 它们使非常简单的操作 (CRUD) 变得容易
      • 通常支持更复杂的查询(联接、分组依据等)
      • 真正复杂的查询通常很难执行,但它们通常支持使用原始 SQL,因此您可以根据需要自行制作。
      • 通常,它们仍然要求您为特定表定义列和类型。所以还有一些工作要做。
    2. 将信息存储为 JSON。如果您真的想按原样存储 JSON 数据,您可以选择直接将 JSON 对象写入数据库。关于这种方法的一些注意事项:

      • 存储将非常容易 - 您无需执行复杂的查询。
      • 检索会有点困难,除非您的数据库支持 JSON 数据类型,并允许为该类型建立索引(MySQL 5.7 对此提供了一些支持)
      • 未强制执行架构,当未来的版本需要更改架构时,这可能会给您带来问题 - 您必须处理一些可能没有新字段的值。

    一般来说,我建议您使用 ORM,而不是将信息存储为 JSON。仅从经验来看,如果这样做,维护将变得非常困难,并且对 JSON 索引的支持在 MySQL 中是相对较新的。如果您认为这确实更好,我建议您使用非关系数据库而不是 MySQL。

    但是对于大多数用例,选项 1 - ORM - 可能是安全的选择。

    【讨论】:

      【解决方案2】:

      您不能简单地使用 SQL 来做到这一点。在 SQL 语法中,VALUES 子句中的列名和值个数必须在解析查询时固定。

      当然,列必须存在于表定义中。如果您的 JS 对象具有与实际列不匹配的额外属性,则无论如何它都不会工作。

      要做你想做的事,你需要一些知道表中存在的列的 JS 类。它会在您的 JS 对象中挑选出名称与表中已知列匹配的属性子集,并且我假设忽略其他属性。或者如果存在非法属性,您是否希望它引发错误?

      这说明了一个问题 - 您希望映射执行的操作不一定是其他人希望执行的操作。或者甚至不是您希望它在您的其他应用中执行的操作。

      【讨论】:

        猜你喜欢
        • 2020-11-19
        • 2016-11-19
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 2015-07-25
        • 1970-01-01
        • 2017-06-22
        • 2020-03-20
        相关资源
        最近更新 更多