Depuración (visualización) del comando SQL enviado a la base de datos por SQLAlchemy

Tengo una clase de ORM llamada Persona, que se envuelve alrededor de una tabla de personas:

Después de configurar la conexión a la base de datos, etc, ejecuto la instrucción ff.

people = session.query (Person) .all ()

La tabla de personas no contiene ningún dato (todavía), así que cuando imprimo las personas variables, obtengo una lista vacía.

Cambié el nombre de la tabla a la que se hace referencia en mi clase ORM People, a people_foo (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:

  1. ¿Cómo puedo configurar SQLAlchemy para que propague los errores db al script?
  2. ¿Cómo puedo ver (es decir, imprimir) el SQL que se envía al motor db?

Si ayuda, estoy usando PostgreSQL como db

[Editar]

Estoy escribiendo un paquete. En mi script __main__.py , tengo el siguiente código (acortado aquí):

 ### __main__.py import common # imports logging and defines logging setup funcs etc logger = logging.getLogger(__name__) def main(): parser = OptionParser(usage="%prog [options] ", version="%prog 1.0") commands = OptionGroup(parser, "commands") parser.add_option( "-l", "--logfile", dest="logfile", metavar="FILE", help="log to FILE. if not set, no logging will be done" ) parser.add_option( "--level", dest="loglevel", metavar="LOG LEVEL", help="Debug level. if not set, level will default to low" ) # Set defaults if not specified 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) # and so on ... #### dbfuncs.py import logging # not sure how to 'bind' to the logger in __main__.py logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) engine = create_engine('postgres://postgres:pwd@localhost:port/dbname', echo=True) 

[Edit2]

el módulo común configura el registrador correctamente, y puedo usar el registrador en mis otros módulos que importan comunes.

Sin embargo, en el módulo dbfuncs, recibo el siguiente error / advertencia:

No se encontraron controladores para el registrador “sqlalchemy.engine.base.Engine

Además del parámetro echo de create_engine() hay una forma más flexible: configurar el logging para hacer eco de las declaraciones del motor:

 import logging logging.basicConfig() logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) 

Consulte la sección Configuración de registro de la documentación para obtener más información.

Puede ver las declaraciones de SQL que se envían a la base de datos al pasar echo = True cuando se crea la instancia del motor (generalmente utilizando la llamada create_engine () o engine_from_config () en su código).

Por ejemplo:

 engine = sqlalchemy.create_engine('postgres://foo/bar', echo=True) 

Por defecto, las declaraciones registradas van a la salida estándar.