Depurando (exibindo) comando SQL enviado ao banco de dados por SQLAlchemy

| | | |

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:

  1. Como posso configurar o SQLAlchemy para que ele propaga erros de banco de dados de volta para o script?
  2. 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

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method