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 ;-).
0 Kommentare