Ya, miren, me olvide un poco de los decoradores. Voy a intentar harcelo de otra forma.
Ahora tengo lo siguiente:
Código PHP:
#!/usr/bin/env python
# -*- coding: utf-8 -*
import psycopg2
class conexion(object):
''' clase para conectar '''
def __init__(self):
self.__host = 'localhost'
self.__dbname = 'asdasdsad'
self.__user = 'asdsadsa'
self.__password = 'sadsad'
# self.__conexion
# self.__cursor
#------------------------------------------------------------------------------------
#--------------------------------------CONEXION--------------------------------------
#------------------------------------------------------------------------------------
def conexionAbrir(self):
''' abrir conexion '''
try:
self.__conexion = psycopg2.connect('host='+self.__host+' dbname='+self.__dbname+' user='+self.__user+' password='+self.__password)
except:
return False
return True
def conexionCerrar(self):
''' cerrar conexion '''
try:
self.__conexion.close()
except:
return False
return True
def conexionSentencia(self, instruccion, *parametro):
''' ejecutar sentencia '''
try:
self.__cursor.execute(instruccion, parametro)
except:
return False
return True
def conexionCommit(self):
try:
self.__conexion.commit()
except:
return False
return True
def conexionRollback(self, commit = True):
try:
self.__cursor.rollback()
except:
return False
return True
#------------------------------------------------------------------------------------
#---------------------------------------CURSOR---------------------------------------
#------------------------------------------------------------------------------------
def cursorAbrir(self):
''' crear cursor '''
try:
self.__cursor = self.__conexion.cursor()
except:
return False
return True
def cursorCerrar(self):
''' cerrar cursor '''
try:
self.__cursor.close()
except:
return False
return True
def cursorFetchall(self):
try:
return self.__cursor.fetchall()
except:
return False
def cursorFetchmany(self, dimension):
try:
return self.__cursor.fetchmany(dimension)
except:
return False
def cursorFetchone(self):
try:
return self.__cursor.fetchone()
except:
return False
def getCursor(self):
return self.__cursor
cursor = property(getCursor)
Código PHP:
#!/usr/bin/env python
# -*- coding: utf-8 -*
from dato.conexion import conexion
class tabla1(conexion):
''' clase para conectar a tabla '''
def __init__(self):
conexion.__init__(self)
def sentencia(self, f, *args, **kw_args):
if conexion.conexionAbrir(self) and conexion.cursorAbrir(self):
error = f(*args, **kw_args)
else:
error = True
conexion.cursorCerrar(self)
conexion.conexionCerrar(self)
return error
def insert(self, *informacion):
return self.sentencia(self.__insert,*informacion)
def __insert(self, *informacion):
for i in informacion:
conexion.conexionSentencia(self,'insert into tabla1 (informacion) VALUES (%s)',i)
return conexion.conexionCommit(self)
def update(self, *informacion, **restriccion):
pass
ab = tabla1()
ab.insert("ai","oi")
Código PHP:
#!/usr/bin/env python
# -*- coding: utf-8 -*
from dato.conexion import conexion
class tabla2(conexion):
''' clase para conectar a tabla '''
def __init__(self):
conexion.__init__(self)
def sentencia(self, f, *args, **kw_args):
if conexion.conexionAbrir(self) and conexion.cursorAbrir(self):
error = f(*args, **kw_args)
else:
error = True
conexion.cursorCerrar(self)
conexion.conexionCerrar(self)
return error
def insert(self, *informacion):
return self.sentencia(self.__insert,*informacion)
def __insert(self, *informacion):
for i in informacion:
conexion.conexionSentencia(self,'insert into tabla2 (informacion1,informacion2,numero) VALUES (%s,%s,%s)',*i)
return conexion.conexionCommit(self)
ab = tabla2()
ab.insert(("a","b",1),("c","d",2),("e","f",3))
Basicamente cree una funcion
sentencia, para evitarme en cada funcion en donde debiera realizar un sentencia sql el hacer
if conexion.conexionAbrir(self) and conexion.cursorAbrir(self):
error = trabajar(parametros)
else:
error = True
conexion.cursorCerrar(self)
conexion.conexionCerrar(self)
return error
Código PHP:
def sentencia(self, f, *args, **kw_args):
if conexion.conexionAbrir(self) and conexion.cursorAbrir(self):
error = f(*args, **kw_args)
else:
error = True
conexion.cursorCerrar(self)
conexion.conexionCerrar(self)
return error
como ven, esta funcion solo recibe los parametros y el nombre de la funcion que realizará la sentencia deseada(insert,update,select...)
el problema, como verán, es que debo volver a escribir la funcion
sentencia en cada una de la clases que son herencia de conexion(tabla1, tabla2)
Mio duda es: ¿existe alguna manera de definir esa funcion en un solo lugar, sin tener que copiarla en cada clase hija?
he tratado de usar wrap, meterla en la clase padre(conexion), pero no me funciona, y no se que pudiera estar haciendo mal
No se si hay solución. Espero puedan ayudarme, y disculpen lo torpe de mi codigo(recien empeze con python, y llevaba mucho tiempo programando en un lenguaje no orientado a objetos, o sea C)
Saludos