insert anidado

damufo damufo en gmail.com
Vie Mar 14 09:22:46 CET 2008



Chema Cortes escribiu:
> El 2008/3/13, damufo <damufo en gmail.com> escribió:
>> Hola:
>>
>>  win xp
>>  python 2.5
>>  wx 2.8
>>  adodbapi
>>  bd access
>>
>>  Quería saber si se pueden hacer inserts anidados, sería a través de
>>  adodbapi contra una base de datos access.
>>  He probado así pero no va.
>>
>>  insert tabla (campo1, campo2) values (valor1, valor2), (valor1, valor2);
> 
> Esta sintaxis no es estándar. Hay gestores como mysql que la aceptan,
> pero es mejor no usarla.
> 
> El truco consiste en usar el .executemany() de la dbapi,
> parametrizando la consulta:
> 
> 
> cur.executemany("insert tabla (campo1, campo2) values (?,?)", lista_valores)
> 
> 
no conocía esta posibilidad la probaré.

>>  Y ya que estamos, el motivo es el de no hacer tantos accesos a la base
>>  de datos para ganar veolcidad. La verdad es que no se si realmente
>>  ganaré algo.
> 
> La dbapi supone que un buen gestor de bases de datos, antes de
> ejecutar el .executemany(), puedee "preparar" la consulta
> parametrizada y así acelerar su ejecución.  La realidad es los
> conectores no llegan a "preparan" la consulta, acabando por ejecutar
> la consulta tantas veces como parámetros haya.
> 
> Otra cosa es que access no es ninguna maravilla, así que no esperes maravillas.
> 
Lo de access (en concreto access97) no es elección mía. y no me queda 
mas remedio que trabajar contra esta base de datos.
> 
>>  De cada vez que inserto registros lo hago por cientos, de esta forma
>>  intentaré que en lugar de 10 accesos sea uno pero con todo de una vez
>>  (si se puede claro).
> 
> El ADO gestiona su propia caché, por lo que no te debería preocupar
> cuántos accesos se hagan. En general, los gestores de bases de datos
> (buenos) tienen estrategias para evitar que haya ralentización, por
> muy frecuentes que se hagan los commits o se hagan transacciones
> masivas. Claro está, me estoy refiriendo a los gestores buenos.
> 
> Si quieres algún consejo, decirte que access tiene el problema de que
> bloquea parte de la tabla que estás modificando (bloque de tamaño
> indeterminado, que sobrepasa del tamaño del registro), lo que provoca
> errores extraños. Es mejor que no pienses en optimizar y haz que el
> programa acabe cuanto antes, por ejemplo, activando el autocommit para
> que haga la transacción en cada insert. Así mismo, te puedes plantear
> el abrir la base de datos en exclusiva (parámetro Exclusive=1 en la
> cadena de conexión).
El acceso a la base de datos será por un usuario de cada vez por lo que 
no hai problema.

Lo del autocommit ya debe venir por defecto pues no es necesario 
lanzarlo para que actualice la BD.

Finalmente, muchas gracias.

> _______________________________________________
> Lista de correo Python-es 
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
> 
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es