On 24/03/10 22:56, damufo wrote: > Hola: > Estoy tratando de volcar una serie de registros a una base de datos de > access 97. son sobre 90.000 > > Una vez hecha la conexión > Los valores los introduzco en la variable values > > for i in values: > cursor.execute(sql, i) > j = j + 1 > if j > 100: > self.conexion.commit() > j = 1
Supongamos que 'i' sea una tupla (o al menos una secuencia) y que sql sea una query DML de inserción: Para ser precisos, estás accediendo a la base de datos con el motor Jet, que no tiene transacciones. El commit() no hace nada, todo funcionará como si tuviera activado el autocommit. > La cosa tarda mucho, he probado a lanzar un commit cada 100 registros > pero nada, tarda varia horas. > > El caso es que el proceso llega a consumir 1,5 gigas de memoria ram. Te podría recomendar una alternativa usando execute_many, pero de mi experiencia con adodbapi te adelanto que no sirve de nada. Equivale a realizar "executes" individuales. Es extraño tanto consumo de memoria. No puede ser ni por adodbapi ni por el fragmento de código que has puesto. Trata de convertir la lista 'values' a un iterador o similar para que no sea necesario tener cargados los 90.000 registros en memoria. *Lo que seguro que te ayuda mucho es si abres la base de datos en modo exclusivo. Basta que añadas ";Exclusive=1" a tu cadena DSN.* _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/