63 votes

Générer Insérer des instructions SQL à partir d'un fichier csv

J'ai besoin d'importer un fichier csv dans Firebird et j'ai passé quelques heures à essayer quelques outils et aucun adapter à mes besoins.

Le principal problème est que tous les outils que j'ai essayé comme EMS Data Import et Firebird Données de l'Assistant d' attendre que mon csv fichier contient toutes les informations nécessaires par ma Table.

J'ai besoin d'écrire du SQL personnalisée dans l'instruction insert, par exemple, j'ai un fichier cvs avec le nom de la ville, mais comme ma base de données a déjà toutes les villes dans une autre table (normalisée), j'ai besoin d'écrire une sous-sélection dans l'instruction insert de recherche pour la ville et écrire son ID, aussi, j'ai une procédure stockée pour cread GUID.

Mon instruction Insert serait quelque chose comme ceci:

INSERT INTO PERSON (ID, NAME, CITY_ID) VALUES((SELECT NEW_GUID FROM CREATE_GUID), :NAME, (SELECT CITY_ID FROM CITY WHERE NAME = :CITY_NAME)

Je sais qu'il est très facile d'écrire une application pour le faire, mais je n'aime pas à réinventer la roue, et je suis sûr qu'il y a quelques outils pour le faire.

Pouvez-vous les gars me donner quelques conseils?

129voto

Chris Roberts Points 7543

C'est un peu brut mais pour l'un des emplois, j'ai parfois l'utilisation d'Excel.

Si vous importez le fichier CSV dans Excel, vous pouvez créer une formule qui crée une instruction INSERT en utilisant la concaténation de chaîne dans la formule. Si - si votre fichier CSV contient 3 colonnes qui apparaissent dans les colonnes A, B et C dans Excel, vous pourriez écrire une formule comme...

="INSERT INTO Matable (Col1, Col2, Col3) VALUES (" & A1 & ", " & B1 & ", " & C1 & ")"

Ensuite, vous pouvez recopier la formule vers le bas l'ensemble de vos lignes, et de copier-coller la réponse dans un fichier texte à l'encontre de votre base de données.

Comme je l'ai dit - c'est brut, mais il peut être tout à fait un "rapide et sale" façon d'obtenir un travail fait!

10voto

Blorgbeard Points 38991

J'utilise parfois Du Monde la plus Simple Générateur de Code (Javascript édition). Il est en ligne, mais c'est juste javascript - vos données ne sont pas aller n'importe où. Il y a aussi un asp version , avec plus de fonctionnalités.

8voto

Vaibhav Points 7334

Eh bien, si c'est un fichier CSV, et c'est un processus d'une fois, ouvrez le fichier dans Excel, puis d'écrire des formules à remplir de vos données dans n'importe quelle manière que vous désirez, puis d'écrire un simple Concat formule pour construire votre SQL, et ensuite copier cette formule pour chaque ligne. Vous obtiendrez un grand nombre d'instructions SQL que vous pouvez exécuter de n'importe où vous voulez.

5voto

Guy Points 5465

Fabio,

J'ai fait ce que Vaibhav a fait de nombreuses fois, et c'est une bonne "rapide et sale" de façon à obtenir des données dans une base de données.

Si vous devez le faire à quelques reprises, ou sur un certain type de calendrier, puis d'une façon plus fiable consiste à charger les données au format CSV, "en" en une table de travail (j'.e customer_dataload) et ensuite utiliser le standard SQL pour remplir les champs manquants.

(Je ne sais pas Firebird de la syntaxe, mais quelque chose comme...)

UPDATE person
SET id = (SELECT newguid() FROM createguid)

UPDATE person
SET cityid = (SELECT cityid FROM cities WHERE person.cityname = cities.cityname)

etc.

Généralement, c'est beaucoup plus rapide (et plus fiable) pour obtenir les données DANS la base de données et de corriger les données que d'essayer de corriger les données en cours de téléchargement. Vous obtenez également l'avantage de transactions pour vous permettre de RESTAURATION, si cela ne fonctionne pas!!

4voto

Nickolay Points 14384

Vous pouvez importer le fichier CSV dans une table comme l'est, puis d'écrire une requête SQL qui ne toutes les transformations nécessaires sur la table importée et insère le résultat dans la table cible.

Donc quelque chose comme:

<(charger le fichier CSV en temptableau - n, ville,nom)>

insérer dans target_table

sélectionnez t.n, c.city_id comme ville

de temp_table t, les villes c

où t.villenom = c.villenom

Astuce sympa sur l'utilisation d'Excel, mais je suggère également d'être à l'aise avec un langage de script comme Python, parce que pour certaines tâches, il est plus facile d'écrire un petit script python pour faire le travail que d'essayer de trouver la fonction dont vous avez besoin dans Excel ou dans un pré-fabriqué outil qui fait le travail.

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