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