2015-11-10 3 views
5

Ich mache meine ersten Schritte mit Python und SQL-Datenbanken und bin immer noch nicht sicher, welches Paket zu verwenden und wie. Ich habe eine Liste mit ca. 300k Wörterbüchern mit jeweils etwa 20 Schlüsseln. Diese Dicts sollen in eine SQL-Tabelle eingefügt werden.Einfügen einer Liste von Wörterbüchern in eine SQL-Tabelle mit Python

Meiner Meinung nach ist der Vorteil der Liste der dict Ansatz, dass ich explizit die Spalten benennen, in denen ich bestimmte Werte eingeben möchte. (Es könnte sein, dass dies kein guter Ansatz ist)

Lassen Sie mich ein konkreteres Beispiel vorstellen, das das Wesentliche meines Problems erfasst. Die Tabelle besteht aus drei Spalten: ID (Ganzzahl), Preis (Dezimal), Typ (Zeichenfolge). Type unterstützt Nullwerte.

Die Tasten meiner dict haben den gleichen Namen und die Liste der dicts könnte wie folgt aussehen:

lst = [{'ID':1, 'Price': '9.95', 'Type': None}, 
     {'ID':2, 'Price': '7.95', 'Type': 'Sports'}, 
     {'ID':3, 'Price': '4.95', 'Type': 'Tools'}, ...] 

So sind die Fragen, die die folgenden auftreten werden:

  1. Ist der Ansatz dicts das Recht? (Beachten Sie, dass ich 20 Spalten habe)
  2. Wenn ja/oder nein: Wie sollte man eine solche Abfrage effizient durchführen?
  3. Ist es erforderlich, die Preise in Dezimal und vor der SQL-Anweisung zu konvertieren, oder kann dies "on-the-fly" erreicht werden
  4. Wird der None-Wert automatisch in null konvertiert, oder ist zusätzliche Arbeit erforderlich? ?
+0

Welche Art von Projekt arbeiten Sie? Wenn Sie Python und eine Datenbank verwenden, kann die Implementierung eines MVC wie Django hilfreich sein. https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93Controller https://www.djangoproject.com/ –

+0

Ich hole Daten von einem Webscraping-Service (mehrere JSON-Dateien) und müssen Informationen extrahieren, die ich in einen MSSQL-Server einfüge. – Quickbeam2k1

+0

Ich gehe davon aus, dass dies einmalig ist, also ist die Implementierung eines gesamten Frameworks kein nützlicher Vorschlag. Welche Art von SQL verwenden Sie? Viele DBs unterstützen Masseneinfügungen in verschiedenen Formaten (dh das Schreiben Ihrer webscraped Daten in eine Datei kann nützlicher sein). Z.B. https://msdn.microsoft.com/en-CA/library/ms188609.aspx (bearbeiten falschen Link) –

Antwort

3

Angenommen, Sie verwenden einen Python Database API specification kompatiblen Datenbanktreiber.

Typumwandlungen (Fragen 3 und 4) sollten sofort vom Datenbanktreiber übernommen werden.

Was die 2), gibt es executemany():

cursor.executemany(""" 
    INSERT INTO 
     mytable 
     (id, price, type) 
    VALUES 
     (%(id)s, %(price)s, %(type)s) 
""", lst) 
+0

In Ihrer Lösung würden Sie also keine Liste von Wörterbüchern verwenden, sondern eine Liste von Tupeln. Deshalb musst du die Reihenfolge in jedem Tupel beibehalten, oder? – Quickbeam2k1

+1

@ Quickbeam2k1 nono, Ich verlasse "lst" im Grunde wie es ist - eine Liste von Wörterbüchern - Sie müssen nur darauf achten, dass die Platzhalter in der Abfrage den Schlüsseln in den Wörterbüchern entsprechen. – alecxe

+0

hmm, damit Wörterbücher nicht bestellt werden, ist das kein Problem? (d. h.% (id) bezieht sich auf den ID-Schlüssel im Diktat usw.) Wird diese Aussage auch eine vorbereitete Aussage sein? So weit ich dachte, muss man in diesem Fall als Platzhalter angeben.Aufgrund der Menge an Abfragen ist eine vorbereitete Anweisung unbedingt zu bevorzugen – Quickbeam2k1

Verwandte Themen