Por lo general para leer datos en Odoo con xmlrpc, siempre usé la misma secuencia de pasos. Primero hacía el search para obtener los IDs de los objetos que necesitaba leer, luego hacía el read. Lo cual no era del todo performante porque mínimo hacemos dos llamadas y muchas veces encontramos el siguiente patrón:
posting_ids = models.execute_kw(dbname,uid,pwd,'mercadolibre.posting','search',[[]])
for posting_id in posting_ids:
posting_data = models.execute_kw(dbname,uid,pwd,'mercadolibre.posting','read',[[posting_id],['meli_id']])
items.append(posting_data[0].get('meli_id'))
Lo cual podía terminar en miles de llamadas a la base de datos debido a la cantidad de consultas que hacíamos (en este caso estamos consultando un modelo que contiene las publicaciones de Mercadolibre, de las cuales tenemos decenas de miles en cualquier pyme argentina)
Como podemos mejorar esto? Odoo tiene un método maravilloso que combina en la misma llamada la búsqueda y la lectura. El método se llama search_read es muy simple. Para reemplazar las líneas anteriores solo debemos hacer lo siguiente:
domain = [[]]
arguments = {'fields': ['meli_id']}
posting_data = models.execute_kw(dbname,uid,pwd,'mercadolibre.posting','search_read',domain,arguments)
for posting in posting_data:
items.append(posting.get('meli_id'))
Este método es mucho más rápido, ya que reduce de manera considerable la cantidad de llamadas a PostgreSQL. También se encuentra disponible en el ORM (en este caso lo estoy usando con xmlrpc, pero es válido en otros ambientes)