2017-11-20 2 views
0

Ich versuche, die Mysql Insert Abfrage wie folgt zum Einfügen Millionen von Datensätzen zu erstellen:ohne vorherige Konvertierung Tupeln innerhalb einer Liste Joining Str

INSERT INTO mytable (fee, fi) VALUES 
    ('data1',96) 
    ,('data2',33) 
    ,('boot',17) 

Meine Werte wird als Tupel in der Liste gespeichert:

datatuplst = [("data1",96), ("data2", 33),("data3", 17)] 

Mein Code:

c3 = con.cursor() 
c3.execute("INSERT INTO `bigdataloadin` (`block_key`, `id`) VALUES %s" %','.join(datatuplst)) 

Dies funktioniert nicht, und ich bin immer Fehler:

Typeerror: Sequenzitem 0: str Beispiel erwartet, fand Tupel

Benötigen Sie auf Hilfe, wie mit gespeicherten Werten in Tupeln Liste der dynamischen Abfrage erstellen.

Antwort

1

Sie können die Zeichenfolge generieren, die Sie benötigen. Der Fehler ist erklärend genug. Wenn es ','.join(datatuplst) ist, ist der Interpreter gezwungen, Tupel zu verbinden. So verwenden Liste Verständnis können Sie diese stattdessen sagen:

','.join([str(el) for el in datatuplst]) 

Die Ausgabe für diese Aussage sein wird: "('data1', 96),('data2', 33),('data3', 17)"

dann Ihre tatsächliche INSERT-Anweisung interpretiert wird, wie folgt:

"INSERT INTO `bigdataloadin` (`block_key`, `id`) VALUES ('data1', 96), 
('data2', 33),('data3', 17)" 

Viel Glück!

Verwandte Themen