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.")
Comentarios
Publicar un comentario