Eu tenho uma classe ORM chamada Person, que envolve uma tabela pessoa:
Depois de configurar a conexão com o banco de dados etc, eu executo a instrução:
people = session.query(Person).all()
A tabela person não contém nenhum dado (ainda), então quando eu imprimo a variável people
, recebo uma lista vazia.
Renomeei a tabela referida na minha classe ORM People
, para people_foo
(que não existe).
Eu então executo o script novamente. Fiquei surpreso que nenhuma exceção foi lançada ao tentar acessar uma tabela que não existe.
Portanto, tenho as seguintes 2 perguntas:
- Como posso configurar o SQLAlchemy para que ele propaga erros de banco de dados de volta para o script?
- Como posso visualizar (ou seja, imprimir) o SQL que está sendo enviado para o mecanismo de banco de dados?
Se ajudar, estou usando o PostgreSQL.
[Edit]
Estou escrevendo um pacote. No meu script __main__.py
, tenho o seguinte código (abreviado aqui):
### __main__.py import common # importa o log e define as funções de configuração do log etc logger = logging.getLogger(__name__) def main(): parser = OptionParser(usage="%prog [options] <commands>", version="%prog 1.0") comandos = OptionGroup(parser, "commands") parser.add_option( "-l", "--logfile", dest="logfile", metavar="FILE", help="log to FILE. se não definido, nenhum registro será feito" ) parser.add_option( " --level", dest="loglevel", metavar="LOG LEVEL", help="Nível de depuração. se não for definido, o nível padrão será baixo" ) # Configura os padrões se não for especificado se não for options.loglevel: loglevel = 1 else: loglevel = options.loglevel se não options.logfile: logfilename = "datafeed.log" else: logfilename = options.logfile common.setup_logger(False, logfilename, loglevel) # e assim por diante... #### dbfuncs. py import logging # não tenho certeza de como "vincular" ao logger em __main__.py logging.getLogger("sqlalchemy.engine").se tLevel(logging.INFO) engine = create_engine("postgres://postgres:[email protected]:port/dbname", echo=True)
[Edit2]
O módulo comum configura o logger corretamente, e posso usar o logger em meus outros módulos que importam common.
No entanto, no módulo dbfuncs
, eu estou recebendo o seguinte erro/aviso:
Nenhum manipulador foi encontrado para o logger "sqlalchemy.engine.base.Engine