Tengo una clase ORM llamada Persona, que envuelve una tabla de personas:
Después de configurar la conexión a la base de datos, etc., ejecuto la instrucción:
people = session.query(Person).all()
La tabla de personas no contiene ningún dato (todavía), así que cuando imprimo la variable personas
, obtengo una lista vacía.
Cambié el nombre de la tabla a la que se hace referencia en mi clase ORM Personas
, a personas_foo código> (que no existe).
Luego ejecuto el script de nuevo. Me sorprendió que no se lanzara ninguna excepción al intentar acceder a una tabla que no existe.
Por lo tanto, tengo las siguientes 2 preguntas:
- ¿Cómo puedo configurar SQLAlchemy para que propaga los errores de la base de datos al script?
- ¿Cómo puedo ver (es decir, imprimir) el SQL que se envía al motor de la base de datos?
Si ayuda, estoy usando PostgreSQL.
[Editar]
Estoy escribiendo un paquete. En mi secuencia de comandos __main__.py
, tengo el siguiente código (abreviado aquí):
### __main__.py import common # imports logging and defines logging setup funcs etc logger = logging.getLogger(__name__) def main(): parser = OptionParser(usage="%prog [options] <commands>", version="%prog 1.0") commands = OptionGroup(parser, "commands") parser.add_option( "-l", "--logfile", dest="logfile", metavar="FILE", help="log to FILE. si no se establece, no se realizará ningún registro" ) parser.add_option( " --level", dest="nivel de registro", metavar="NIVEL DE REGISTRO", ayuda="Nivel de depuración. Si no se establece, el nivel se establecerá de forma predeterminada en bajo" ) # Establecer valores predeterminados si no se especifica if not options.loglevel: loglevel = 1 else: loglevel = options.loglevel if not options.logfile: logfilename = "datafeed.log" else: logfilename = options.logfile common.setup_logger(False, logfilename, loglevel) # y así sucesivamente ... #### dbfuncs. py import logging # no estoy seguro de cómo "vincular" al registrador en __main__.py logging.getLogger("sqlalchemy.engine").se tLevel(logging.INFO) motor = create_engine("postgres://postgres:[email protected]:port/dbname", echo=True)
[Editar2]
El módulo común configura el registrador correctamente, y puedo usar el registrador en mis otros módulos que importan común.
Sin embargo, en el módulo dbfuncs
, Recibo el siguiente error/advertencia:
No se pudieron encontrar controladores para el registrador "sqlalchemy.engine.base.Engine