Odtwarzanie kopii Postgres bezpośrednio w Pythonie?

Mam blok danych, obecnie jako listę N-krotek, ale format jest dość elastyczny, który chciałbym dołączyć do tabeli Postgres - w tym przypadku każda N-krotka odpowiada wierszowi w DB.

To, co robiłem do tej pory, to zapisanie ich do pliku CSV, a następnie użycie kopii postgres' a do masowego załadowania tego wszystkiego do bazy danych. To działa, ale jest nieoptymalne, wolałbym być w stanie zrobić to wszystko bezpośrednio z Pythona. Czy istnieje metoda z Pythona do skopiować typ kopii w Postgres?

Author: unmounted, 2009-12-09

1 answers

Jeśli używasz sterownika psycopg2, Kursory zapewniają funkcje copy_to i copy_from, które mogą odczytywać z dowolnego obiektu podobnego do pliku (w tym bufora StringIO).

W plikach są przykłady examples/copy_from.py i examples/copy_to.py które pochodzą z dystrybucji źródeł psycopg2 .

Ten fragment pochodzi z przykładu copy_from.py:

conn = psycopg2.connect(DSN)
curs = conn.cursor()
curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")

# anything can be used as a file if it has .read() and .readline() methods
data = StringIO.StringIO()
data.write('\n'.join(['Tom\tJenkins\t37',
                  'Madonna\t\N\t45',
                  'Federico\tDi Gregorio\t\N']))
data.seek(0)

curs.copy_from(data, 'test_copy')
 46
Author: Jarret Hardie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-19 19:49:14