Node.js und SQLite mehrere Eintraege gleichzeitig speichern?

1 Antwort

Du müsstest dir aus deinen Daten einen Query wie diesen zusammenbauen:

INSERT INTO some_table (column1, column2, ...) VALUES
  (value1, value2, ...),
  (value1, value2, ...),
  /* ... */;

Angenommen, du hast ein solches Array an Nutzerobjekten:

const userData = [
  { name: "John Doe", age: 19 },
  { name: "Mary Sue", age: 21 }
];

Dann könntest du dir so den Query zusammenbasteln:

const placeholders = userData.map(() => "(?, ?)").join(",");
const query = `INSERT INTO users (name, age) VALUES ${placeholders}`;

Das Array mit den konkreten Werten kann in einer separaten Funktion ermittelt werden:

function getParams(data) {
  const params = [];
  
  for (const entry of data) {
    for (const key in entry) {
      params.push(entry[key]);
    }
  }

  return params;
}

Und zum Abschluss führt man den Query aus:

db.run(query, getParams(users), error => {
  if (error) {
    console.error(error);
    throw error;
  }
});

Würden die Statements voneinander abhängig sein, könnte sich alternativ auch eine Transaktion lohnen, die bei Fehlschlag eines Statements einen Rollback durchführt. Hier hat jemand sogar schon eine generische Funktion dafür gebaut.

Wenn du tatsächlich öfter Anwendungsfälle mit mehreren hundert Einträgen haben solltest, wäre es nicht schlecht, die unterschiedlichen Lösungswege bezüglich ihrer Ausführungsgeschwindigkeit zu testen / vergleichen.