如何将JSON对象放在MySQL数据库中

时间:2018-04-17 17:29:03

标签: mysql node.js express node-modules

我正在关注客户的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)

2 个答案:

答案 0 :(得分:2)

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

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

    • 它们可以轻松实现非常简单的操作(CRUD)
    • 通常支持更复杂的查询(连接,分组等)
    • 通常很难做到复杂的查询,但他们通常支持使用原始SQL,因此如果需要,您可以自己制作。
    • 通常,它们仍然要求您为特定表定义列和类型。所以还有一些工作要做。
  2. 将信息存储为JSON 。如果您确实希望按原样存储JSON数据,则可以选择直接编写JSON对象来执行数据库。关于这种方法的一些注意事项:

    • 存储非常简单 - 您无需进行复杂的查询。
    • 检索会有点困难,除非您的数据库支持JSON数据类型,并允许为该类型建立索引(MySQL 5.7对此有一些支持)
    • 架构未强制执行,当未来版本需要更改架构时,这可能会对您造成问题 - 您必须处理一些可能没有新字段的值。
  3. 一般情况下,我建议您使用ORM而不是将信息存储为JSON。仅从经验来看,如果这样做就很难维护,并且在JSON中对索引的支持在MySQL中相对较新。如果您认为这确实更好,我建议使用非关系数据库而不是MySQL。

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

答案 1 :(得分:1)

你不能简单地用SQL做到这一点。在SQL语法中,必须在解析查询时修复VALUES子句中列的名称和值的数量。

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

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

这说明了一个问题 - 您希望映射执行的操作不一定是其他任何人希望它执行的操作。或者甚至不是你想要它在你的其他应用程序中做什么。