Как поместить объект JSON в базу данных MySQL

0

Я получаю 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)
Теги:
express
node-modules

2 ответа

2

Существует несколько способов решения этой проблемы.

  1. Используйте библиотеку ORM. Объект Relational Mapper или ORM - это библиотека, которая может помочь вам хранить и извлекать объекты из реляционной базы данных (например, MySQL). Это помогает создать правильную строку SQL для вашего прецедента (создание, чтение, обновление или удаление). Существует множество доступных ORM для Node.js. Вот несколько: Книжная полка, Sequelize, Возражение. Некоторые заметки об ORM

    • Они облегчают выполнение простых операций (CRUD)
    • Обычно существует поддержка более сложных запросов (объединение, группировка и т.д.),
    • На самом деле сложные запросы обычно трудно сделать, но они обычно поддерживают использование raw SQL, поэтому вы можете создавать их самостоятельно, если это необходимо.
    • Как правило, они по-прежнему требуют, чтобы вы определяли столбцы и типы для конкретной таблицы. Поэтому предстоит еще немного работы.
  2. Храните информацию в виде JSON. Если вы действительно хотите сохранить данные JSON как есть, вы можете выбрать для записи объект JSON непосредственно в базу данных. Некоторые замечания об этом подходе:

    • Хранение будет очень просто - вам не нужно делать сложный запрос.
    • извлечение будет немного сложным, если ваша база данных не поддерживает тип данных JSON и не позволяет индексировать этот тип (для поддержки MySQL 5.7 эта поддержка поддерживается)
    • схема не применяется, что может быть проблематично для вас, когда будущие версии требуют изменений в схеме - вам придется иметь дело с некоторыми значениями, возможно, не имеющими новых полей.

В общем, я бы рекомендовал использовать ORM для хранения информации как JSON. По опыту, это становится очень трудно поддерживать, если это сделано, а поддержка индексирования в JSON относительно нова в MySQL. Если вы считаете, что это действительно лучше, я бы рекомендовал использовать нереляционную БД вместо MySQL.

Однако для большинства случаев использования вариант 1 - ORM - вероятно, безопасная ставка.

1

Вы не можете сделать это просто с помощью SQL. В синтаксисе SQL имена столбцов и количество значений в предложении VALUES должны быть исправлены во время разбора запроса.

И, конечно, столбцы должны существовать в определении таблицы. Если ваш объект JS имеет дополнительные свойства, которые не соответствуют реальным столбцам, он не будет работать независимо.

Чтобы сделать то, что вы намереваетесь, вам понадобится некоторый класс JS, который знает о столбцах, которые существуют в таблице. Он выберет подмножество свойств в вашем объекте JS, имена которого соответствуют известным столбцам таблицы, и я предполагаю игнорировать другие свойства. Или вы хотите, чтобы это привело к ошибке, если есть незаконные свойства?

Это пример проблемы - то, что вы хотите, чтобы сделать сопоставление, не обязательно то, что кто-то еще захочет этого сделать. Или даже не то, что вы хотите, чтобы это было в другом приложении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню