2012-04-13 6 views
1

Ich benutze Python-Modul MySQLDb, um mehrere Einträge (manchmal bis zu 300) gleichzeitig einzufügen. Mein SQL sieht etwa so aus ...bekomme eine Liste von Primärschlüsseln nach dem Einfügen mehrerer Einträge

INSERT INTO MyTable (row2,row3) values 
(row2_entry1,row3_entry1),(row2_entry2,row3_entry2),........(row2_entry300,row3_entry300) 

Der Primärschlüssel für diese Tabelle wird automatisch inkrementiert. Was ich will, ist eine Liste der Primärschlüssel der in die Tabelle eingegebenen Einträge. Wie mache ich das mit einer Charge

+0

können Sie eine Transaktion tun, und nutzen Sie die ID mit 'LAST_INSERT_ID()' – hjpotter92

Antwort

0

MySQL LAST_INSERT_ID() gibt nur einen einzigen Wert zurück. Bei Stapeleinfügung wird der Primärschlüsselwert der ersten eingefügten Zeile zurückgegeben.

Sie können ein GUID-Token verwenden, um Zeilen zu verfolgen, die Teil einer Batch-Einfügeoperation sind. Fügen Sie eine zusätzliche varchar(32) Spalte mit dem Namen batch_insert_id zu Ihrer Tabelle hinzu. Verwenden Sie einen bekannten GUID-Wert, wenn Sie Stapel einfügen verwenden. Führen Sie nach dem Einfügen eine Select-Abfrage aus, um die Primärschlüssel der eingefügten Zeilen abzurufen.

import uuid 

batch_insert_id = uuid.uuid4().hex 
# Execute your batch insert query, with batch_insert_id 
# as value of batch_insert_id for all rows 
cursor.execute("SELECT id FROM mytable WHERE batch_insert_id = '%s'", (batch_insert_id,)) 
primary_keys = [row[0] for row in cursor.fetchall()] 
+0

Eine geschickte Arbeit um. Ich bin mir nicht sicher, ob ich das tun darf, aber ich gebe dir die richtige Antwort, da deine Lösung funktionieren würde. Danke für die Hilfe. – b10hazard

Verwandte Themen