[pyar] pyodbc con oracle graba mal los datos

Mariano Mara mariano.mara en gmail.com
Lun Abr 21 17:58:50 ART 2014


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 21/04/14 17:34, Javier Marcon wrote:
> Gracias, probé cambiando los valores de cantidad a int y me sigue 
> pasando lo mismo. Aparte graba los articulos repetidos (repite
> siempre el primero) pero debería grabarlos como son (todos
> distintos).
> 

Así como lo contás, el error no tiene mucho sentido, me parece que
está quedando algún dato fuera:
 * el problema es reproducible con un ejemplo autocontenido? o sea,
fuera de tu aplicación, una simple función que haga lo que queres
hacer, confirme la transacción y termine? ¿lo probaste así?
 * para descartar que el problema es algo del driver, deberías
instalar cx_oracle (con instant client de oracle para minimizar los
instalables) y probar el mismo problema con el driver nativo, sin
pyodbc. Otra vez, una rutina aislada que ejecute el código debería ser
útil (total la dbapi de python implementa siempre el mismo protocolo
para todos los drivers asi que en ejemplo sirve para más de un driver
con nulos o mínimos cambios).



> 
> El 21/04/14 16:44, Joaquin Orbe escribió:
>> ¿Los valores de CANTIDAD no deberian ser 6 y 12, en lugar de u'6'
>> y u'12'? No son cadenas.
>> 
>> Saludos, Joaco.
>> 
>> 
>> 2014-04-21 16:31 GMT-03:00 Javier Marcon <javiermarcon en gmail.com 
>> <mailto:javiermarcon en gmail.com>>:
>> 
>> Hola, yo tengo una aplicación que usa pyodbc para grabar remitos 
>> (master-detail) en 2 tablas de Oracle. Una clase hace un 
>> cursor.execute de una sentencia (que graba datos estadisticos del
>> remito), luego llama a otra clase que graba los datos del remito
>> en 2 tablas, una tabla tiene los datos de cabecera y hace un solo
>> insert con cursor.execute, luego se graba el cuerpo del mensaje
>> con varios cursor.execute asi:
>> 
>> sql = "insert into remitos_detalle ( ORDEN, ARTICULO, UUID,
>> CANTIDAD) values (?, ?, ?, ?)" cursor.execute("delete from
>> remitos_detalle where uuid = ?", (u'7233e21c')) 
>> cursor.execute(sql, (0, u'Art21', u'7233e21c', u'6')) 
>> cursor.execute(sql, (1, u'Art24', u'7233e21c', u'6') ) 
>> cursor.execute(sql, (2, u'Art25', u'7233e21c', u'12')) 
>> cursor.execute(sql, (3, u'Art26', u'7233e21c', u'6'))
>> 
>> Luego se retorna a la clase anterior y se hace el cursor.commit. 
>> Lo que pasa es que se graban bien los datos estadisticos y la
>> cabecera de los remitos, pero la tabla remitos_detalle se graba
>> mal (sin dar error), para el ejemplo anterior en remitos detalle
>> se grabó:
>> 
>> ORDEN  ARTICULO  UUID          CANTIDAD 0            Art21
>> 7233e21c  6 1            Art21         7233e21c  Null 2
>> Art21         7233e21c  Null 3            Art21         7233e21c
>> Null
>> 
>> Los campos ARTICULO y UUID son nvarchar2 (100) y los campos ORDEN
>> y CANTIDAD son Float. La conexión tiene puesto que siempre
>> retorne los datos como unicode.
>> 
>> A alguien se le ocurre por que me puede estar pasando esto?
>> 
>> Gracias,
>> 
>> Javier.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJTVYaKAAoJEFr6LpWE4pndcYMH/3VKKMPVdvcoEdvuuSTRWBfD
4op4RAcdV/7v9/DY8je0FpyNSn7RO7knIyxfgk3ro/t5DMJa6El3Pzr9fZVP0Lsp
Cvl2RC/9rOF/RCGof38WR7JDJfsSXcNHNC+m+vKo8BywDWdxfT2xw5zcaJnyxV5G
q8N5bEhubhumek5XXFRBSR2jBZWWKAp54KNZaz9QPS3II6HDyFSETNxaEEFZdboW
cz62ata5lfJ/v8GXp88l2griZmwqfZ1GnfywKMy+Y9ZPhujX5xAd9g4uDI5SFOIN
wGt1fpaNFGtqfAWydZO/hPXU65LH2X982HfADW5pbyRUmJN3m+5IqS0C5iJ62Pw=
=4wei
-----END PGP SIGNATURE-----


More information about the pyar mailing list