PostgreSQL bulk inserts mit Python

Wer oft viele Daten in seine PostgreSQL Datenbank schreibt, dem möchte ich den COPY-Befehl ans Herz legen. Damit können Daten zwischen Dateien und Tabellen kopiert werden. Mit Psycopg2, “dem” PostgreSQL-Datenbankadapter für Python, sieht das dann ungefähr so aus:

import psycopg2
from cStringIO import StringIO
from itertools import imap
rows = [
    # Wert Spalte A, Wert Spalte B
    [1, 1],
    [2, 2],
    [3, None]
    # ...
]
buff = StringIO()
for row in rows:
    # \t ist standardmäßig der Spaltentrenner und join erwartet string
    print >>buff, "\t".join(imap(str, row))
# Nicht vergessen 😉
buff.seek(0)
with psycopg2.connect('...') as conn:
    with conn.cursor() as cursor:
        # None als NULL senden
        cursor.copy_from(buff, 'Tabelle', null='None')

Dass das ganze echt schnell ist, muss mir an dieser Stelle einfach geglaubt werden ;-).

Eric Lippmann
Eric Lippmann
Lead Senior Developer

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.