viernes, 29 de junio de 2012

Conexión a bbdd oracle desde python

Para poder acceder a una bbdd oracle desde python tan sólo necesitaremos tener instalado:

- cliente oracle (lo puedes obtener de la página de oracle y registrándote en la misma)
- extensión cx_Oracle (lo puedes descargar desde la página http://cx-oracle.sourceforge.net/)

La forma de utilizarlo lo podemos ver en el siguiente ejemplo:

Con este script se pretende actualizar el campo de una tabla pasándole tres argumentos, dos para filtrar el dato y uno que será el nuevo valor.
También hacemos uso de optparse para pasear los argumentos.


#!/usr/bin/python # -*- coding: iso-8859-15 -*- import cx_Oracle, sys, os, datetime from optparse import OptionParser conn_str='usuario/pass@host:port/bbdd' log = '/ruta/para/log/script.log' #Fucion para escribir log def log (texto):         now = datetime.datetime.now()         f = open(log_propio, 'a')         f.write(str (now.ctime()) + ' -> ' + texto + '\n')         f.close() #Se parsea la entrada de datos parser = OptionParser(usage="script.py [-a argumento1] [-b argumento2] [-c valor]", version="script 1.0") parser.add_option("-a", help='Argumento 1 para filtrar el dato. Ej: -a 10. Opción oblicatoria.', type="string", dest="argumento1") parser.add_option("-b", help='Argumento 2.para filtrar el dato. Ej: -b 2012. Opción obligatoria.', type="string", dest="argumento2") parser.add_option("-c", help='Valor al que se quiere cambiar. Ej: -c 6. Opción obligatoria', type="string", dest="valor") (options, args) = parser.parse_args() if options.argumento1 is None:         print 'La opcion argumento1 es necesaria'         parser.print_help()         sys.exit(1) else:         argumento1=options.argumento1 if options.argumento2 is None:         print 'La opcion argumento2 es necesaria'         parser.print_help()         sys.exit(1) else:         arguemento2=options.argumento2 if options.valor is None:         print 'La opcion valor es necesaria'         parser.print_help()         sys.exit(1) else:         valor=options.valor db_conn = cx_Oracle.connect(conn_str) cursor = db_conn.cursor() cursor.execute('select valor from tabla where argumento1 =' + str(argumento1) + ' and argumento2=' + str(argumento2)) registro = cursor.fetchall() log ("Valor actual: " + str(registro)) print "Valor actual: " + str(registro) log ("Se cambia al valor " + valor) print "Se cambia al valor " + valor cursor.execute('update tabla set valor =' + valor + ' where argumento1=' + argumento1 + ' and argumento2=' + str(argumento2)) cursor.close() db_conn.commit() db_conn.close() log ("Valor modificado.")  

No hay comentarios:

Publicar un comentario

Obtener informacion de repositorios a través de los metadatos .git publicados por error

 A raiz de CTF realizado recientemente, me ha parecido interesante publicar este post sobre los errores de seguridad que se encuentran en mu...