Importando miles de registros en Odoo. Usando odoo_csv_import
Existe un gran problema cuando se importan miles de registros en Odoo. La performance. Es insufriblemente lento Odoo. Por varios motivos, no siendo el menor el ORM (basicamente cada registro que pasa por Odoo debe pasar por el ORM que garantiza que la información se almacene de manera consistente). El ORM enlentece bastante el proceso. Por otra parte, esta el hecho que por cada registro que uno actualiza por lo general se hace un commit en la base de datos. Lo cual no es muy performante que digamos.
Una de las soluciones es escribir directamente contra la base de datos por medio de sentencias SQL, lo cual es muy performance pero tiene un par de grandes desventajas. La primera es que en SQL hay que simular el accionar del ORM. Lo cual es peligroso, y sacar bien el proceso es muy trabajoso y consume mucho tiempo. La segunda es realizar mediante XMLRPC el manejo del paginado de los creates, lo cual si aumenta la velocidad. Pero solo es aplicable para los creates y no los writes.
Una de las soluciones que encontré a este problema es una herramienta increible llamada odoo_csv_import. Es una herramienta de la linea de comando que permite mediante procesamiento paralelo en el server, importar archivos CSV en Odoo aplicando el ORM.
A modo de ejemplo; probe de importar 500,000 del padron de ARBA y tardó 10 minutos. Nada mal considerando que tiene en el medio al ORM. En un server no optimizado.
Bueno, que es lo que hay que hacer para usar esta fantástica herramienta? Lo primero es leer la documentación, la cual es bastante completa. Es más, creo que es la herramienta de Odoo mejor documentada en Github. Por ejemplo tiene una sección dedicada a los problemas de actualizar el modelo account_move. Describe muy bien el problema. Veanla, la documentación vale la pena.
Por otra parte, recomiendo despues de instalar mediante pip la herramienta conocer la misma ejecutando los ejemplos. Que son abundantes y proceden a insertar datos jerarquicos como las categorias, y masivos como son los productos. Una vez familiarizado con los ejemplos, ahí procedería a generar un archivo CSV (como lo indica la documentación) y lo cargaría mediante la herramienta. Y así hasta insertar modelos más complejos, por ejemplo mail.message o sale.order.line.
Yo sigo aprendiendo la herramienta. Aún le tengo que encontrar la vuelta a ciertos problemas; por ejemplo carga en memoria todo el archivo csv que se piensa procesar (lo cual termina cancelando el proceso por el OOM). Necesito comprender mejor como funciona el manejo de los IDs, como generarlos y mantenerlos. Y por último como trabajar con transformaciones de código Python.
Es una herramienta muy promisoria. Es interesante que haya nacido en el ambiente de retailing en Belgica (los retailers nadan en volúmenes de información). Y lo mejor es que esta bien mantenida y tenemos el código fuente. No es una herramientea para instalar y hacer andar, uno debe estudiarla y comprender como funciona. Y si o si se debe complementar con otros scripts para hacer su trabajo. Pero definitivamente es muy util para la carga de grandes volúmenes de datos en Odoo.
Acerca de:
Gustavo Orrillo
Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.