3 votes

NodeJS et MySQL : Importer des données CSV avec associations

J'ai cherché sur le web et j'ai trouvé ceci qui pourrait être lié à ma question mais comme je ne comprends pas, je viens poser ma question ici.

Je cherche à insérer des données dans des tables. J'utilise sequelize v6 et mysql.

Ce que j'ai dans ma base de données

J'ai 2 tables, étudiant et township.

Table étudiant : id, name, email, township_id

Table township : id, name

Ce que j'ai dans mes associations

Modèle Étudiant

Student.belongsTo(models.Township, {
    foreignKey: "townshipId",
    as: "township",
});

Modèle Township

Township.hasMany(models.Student, {
    foreignKey: "townshipId",
    as: "township",
});

Ce que j'ai dans la requête:

Dans ma requête, j'ai des données comme ci-dessous :

{
    name: 'john',
    email: 'john@gmail.com',
    township: 'Flank',
}

Question

En fait, j'essaie d'insérer en masse des données csv dans ma base. Les utilisateurs finaux saisiront des données dans Excel comme celles ci-dessus (dans la requête) et les enregistreront sous forme de fichier csv pour les importer dans le système. Le problème est que la valeur que j'obtiens de l'analyse du csv est le nom du township en tant que valeur textuelle, dans ce cas Flank. Mais j'ai besoin de le changer en entier township_id pour pouvoir l'insérer dans la table students avec ce township_id.

(Ce que j'ai fait : Je récupère le nom du township dans ce cas Flank et exécute la requête SELECT township_id FROM townships WHERE name = 'Flank', et j'obtiens township_id s'il y a Flank dans la table townships. Je peux donc maintenant utiliser ce township_id pour l'insertion dans la table students. Mais je pense que c'est très coûteux et un autre fait est que j'ai aussi 50 champs supplémentaires comme celui-ci.)

Par conséquent, ma question est comment puis-je insérer ce township: 'Flank' dans la table students sans trouver explicitement d'abord township_id (évitant ce que j'ai fait).

Merci.

0voto

Akina Points 21771

Le problème est que la valeur que j'obtiens en analysant le csv est le nom du township en tant que valeur textuelle, dans ce cas Flank. Mais j'ai besoin de le changer en entier township_id pour pouvoir l'insérer dans la table students avec ce township_id.

Pour cela, au lieu de

INSERT INTO students (name   , township, ...)
    VALUES           ('John' , 'Flank' , ...)

vous devez utiliser

INSERT INTO students (name   , township_id, ...)
    SELECT            'John' , township_id, ...
    FROM towns
    WHERE town_name = 'Flank';

PS. Je ne sais pas comment INSERT .. SELECT est réalisé dans la syntaxe du script/framework.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X