Estoy buscando la manera más eficiente de insertar a granel algunos millones de tuplas en una base de datos. Estoy usando Python, PostgreSQL y psycopg2.Psycopg2, Postgresql, Python: la forma más rápida de insertar de forma masiva
He creado una larga lista de tulipanes que deben insertarse en la base de datos, a veces con modificadores geométricos como Simplify
.
La forma ingenua de hacerlo sería cadena de formato de una lista de INSERT
declaraciones, pero hay otros tres métodos que he leído sobre:
- Uso
pyformat
binding style para la inserción paramétrica executemany
Uso de la lista de tuplas, y- Usando escribir los resultados en un archivo y usando
COPY
.
Parece que la primera forma es la más eficiente, pero agradecería sus ideas y fragmentos de código diciéndome cómo hacerlo bien.
Usando el cursor.copy_ del archivo pscopg2 es manejado por el cliente. Ni siquiera necesita ser un archivo de sistema de archivos: cualquier objeto similar a un archivo python funciona bien. Consulte http://initd.org/psycopg/docs/cursor.html#cursor.copy_from – piro
En ese caso, sería interesante ver cómo se ha insertado realmente en la base de datos. Tenía la impresión de que COPY de PostgreSQL solo leía desde el servidor. sistema de archivos local y no había forma de copiar un archivo a granel utilizando el cliente. –
También puede leer 'STDIN', que significa que los datos provienen de la aplicación del cliente. Consulte los documentos del comando de copia: http://www.postgresql.org/docs/8.4/static/sql-copy.html – piro