Verwendung von sqlalchemy zu laden, csv Datei in eine Datenbank
Ich versuche zu lernen Programmieren in Python. Ich möchte uns von csv-Dateien in eine Datenbank. Ist es eine gute Idee,
InformationsquelleAutor alex chan | 2015-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil die macht von SQLAlchemy, ich bin auch mit es an ein Projekt. Seine power kommt aus der Objekt-orientierten Art und Weise "sprechen" zu einer Datenbank statt hardcoding SQL-Anweisungen, die ein Schmerz sein kann, zu verwalten. Nicht zu erwähnen, es ist auch viel schneller.
Zur Beantwortung Ihrer Frage sagen, ja! Speicherung von Daten aus einer CSV in eine Datenbank mit SQLAlchemy ist ein Stück Kuchen. Hier ist ein voll funktionsfähiges Beispiel (ich habe SQLAlchemy 1.0.6 und Python 2.7.6):
(Hinweis: dies ist nicht notwendigerweise der "beste" Weg, dies zu tun, aber ich denke, dieses format ist sehr gut lesbar, für einen Anfänger; es ist auch sehr schnell: 0.091 s für 251 Datensätze eingefügt!)
Ich denke, wenn Sie durch Sie gehen Zeile für Zeile, du wirst sehen, was für ein Kinderspiel es zu bedienen ist. Beachten Sie das fehlen von SQL-Anweisungen -- Hurra! Ich nahm auch die Freiheit der Verwendung von numpy zum laden der CSV-Inhalt in zwei Zeilen, aber es kann getan werden, ohne es, wenn Sie mögen.
Wenn Sie wollten, zu vergleichen, gegen die traditionelle Art und Weise, es zu tun, hier ist ein voll funktionsfähiges Beispiel für Referenz:
(Hinweis: auch in den "alten" Weg, das ist keineswegs der beste Weg, dies zu tun, aber es ist sehr gut lesbar und ein "1 zu 1" - übersetzung aus dem SQLAlchemy Weg vs. den "alten" Weg.)
Beachten Sie die SQL-Anweisungen: eine, um die Tabelle zu erstellen, die andere zum einfügen von Datensätzen. Beachten Sie auch, dass es ein bisschen mehr umständlich zu pflegen langen SQL-strings vs. ein einfaches class-Attribut hinzu. Wünschen SQLAlchemy so weit?
Als für Ihre ausländischen key Abfrage, natürlich. SQLAlchemy hat die macht, dies auch tun. Hier ist ein Beispiel, wie ein class-Attribut Aussehen würde, wie eine foreign key-Zuordnung (vorausgesetzt, die
ForeignKey
Klasse wurde auch importiert aus dersqlalchemy
Modul):welche Punkte der "fid" - Spalte als Fremdschlüssel zu Price_History die id-Spalte.
Hoffe, das hilft!
Dies ist nützlich, code, aber es wäre hilfreich, wenn die Daten-Datei wurde im Beispiel enthalten. Dann wäre es wirklich eigenständig.
Ich habe nicht geprüft, warum dies geschieht, aber
genfromtxt
gibt den Fehler zurück:genfromtxt() got an unexpected keyword argument 'skiprows'
. Numpy ist1.12.1-3
(Debian 9.0).Faheem, eine Beispiel-CSV-Datei-URL enthalten ist in einem der Kommentare; erste Zeile in der
try
- Anweisung. Laden Sie es, legen wenn Sie im gleichen Verzeichnis wie dieses Skript, und führen Sie es.Faheem, als pro docs.scipy.org/doc/numpy/reference/generated/...,
skiprows
war veraltet. Ersetzenskiprows=1
mitskip_header=1
. Ich bearbeitet meine Antwort, um diese änderung widerzuspiegeln.InformationsquelleAutor Manuel J. Diaz
Falls Ihre CSV-Datei ist Recht groß, mit INSERTS ist sehr ineffektiv. Sollten Sie eine bulk-loading-Mechanismen, die sich von Basis zu Basis. E. g. in PostgreSQL sollten Sie "KOPIEREN AUS" - Methode:
copy_from
odercopy_expert
von psycopg direkt. Diese Lösung macht es möglich, Sie Millionen von Zeilen auf einmal.gibt es eine Möglichkeit, dies zu erreichen, ohne Sie zu importieren einige riesige Bibliothek?
InformationsquelleAutor ARA1307
Ich habe genau das gleiche problem, und ich fand es paradoxerweise einfacher mit einem 2-Schritt-Prozess mit den pandas:
Beachten Sie, dass mein Ansatz ist ähnlich diese eine, aber irgendwie Google schickte mich zu diesem thread statt, so dass ich dachte, ich würde teilen.
InformationsquelleAutor BehavioralScientist