DB API 2.0

Chema Cortes chemacortes en wanadoo.es
Lun Jun 24 13:06:14 CEST 2002


> > def db_import(sgdb):
> >   if sgdb=="mysql":
> >     return __import__("MySQLdb")
> >   elif sgdb=="postgresql":
> >     return __import__("pgdb")
> >   else:
> >     return None
> 
> 
> por que tiene que ser __import__ en vez de import?

Son bastante diferentes. __import__ es una función que devuelve la referencia al módulo que importa, pero sin añadir el nombre al contexto de ejecución. Para ver las equivalencias:

m=__import__("mimodulo")

equivale a

import mimodulo as m

En el caso que nos ocupa, si dentro de una función haces un 'import', el módulo pasa al espacio de nombres locales y no se vería desde fuera. Hubiera necesitado hacer algo así:

def db_import(sgdb):
  if sgdb=="mysql":
    import MySQLdb as thesgdb
  elif sgdb=="postgresql":
    import pgdb as thesgdb
  else:
    thesgdb=None
  return thesgdb

La ventaja de usar __import__ es que se le puede pasar el nombre del módulo como argumento. Por ejemplo, el siguiente código no se podría hacer con la directiva "import":

MODs={"mysql":"MySQLdb","postgresql":"pgdb"}
def db_import(sgdb):
  if MODs.has_key(sgdb):
    return __import__(MODs[sgdb])
  else:
    return None


Saludos,
-- 
Chema Cortes (chemacortes en wanadoo.es)

_____________________________________________________________________
No olvides nada. Recuerda los cumpleaños, tus citas, tus cenas románticas y 
todo lo que quieras usando la Agenda personal de Wanadoo.es, desde cualquier 
lugar conectado a Internet. Visítala en http://www.wanadoo.es/agenda






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