Débogage (affichage) de la commande SQL envoyée à la base de données par SQLAlchemy

| | | |

J'ai une classe ORM appelée Person, qui s'enroule autour d'une table person :

Après avoir configuré la connexion à la base de données, etc., j'exécute l'instruction :

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

La table person ne contient aucune donnée (pour l'instant), donc quand j'imprime la variable people, j'obtiens une liste vide.

J'ai renommé la table référencée dans ma classe ORM People, en people_foo (qui n'existe pas).

Je relance ensuite le script. J'ai été surpris qu'aucune exception n'ait été levée lors d'une tentative d'accès à une table qui n'existe pas.

J'ai donc les 2 questions suivantes :

  1. Comment puis-je configurer SQLAlchemy pour qu'il propage les erreurs de la base de données vers le script ?
  2. Comment puis-je afficher (c'est-à-dire imprimer) le SQL qui est envoyé au moteur de la base de données ?

Si cela peut aider, j'utilise PostgreSQL.

[Modifier]

J'écris un package. Dans mon script __main__.py, j'ai le code suivant (raccourci ici) :

### __main__.py import common # importe la journalisation et définit les fonctions de configuration de la journalisation etc logger = logging.getLogger(__name__) def main() : analyseur = OptionParser(usage="%prog [options] <commandes>", version="%prog 1.0") commandes = OptionGroup(analyseur, "commandes") parser.add_option( "-l", "--logfile", dest="logfile", metavar="FILE", help="log to FILE. s'il n'est pas défini, aucune journalisation ne sera effectuée" ) parser.add_option( " --level", dest="loglevel", metavar="LOG LEVEL", help="Debug level. if not set, level will default to low" ) # Définir les valeurs par défaut si non spécifié sinon options.loglevel : loglevel = 1 sinon : loglevel = options.loglevel sinon options.logfile : logfilename = "datafeed.log" else : logfilename = options.logfile common.setup_logger(False, logfilename, loglevel) # et ainsi de suite... #### dbfuncs. py import logging # vous ne savez pas comment "lier" à l'enregistreur dans __main__.py logging.getLogger("sqlalchemy.engine").se tLevel(logging.INFO) engine = create_engine("postgres://postgres:[email protected]:port/dbname", echo=True) 

[Edit2]

Le module Common configure correctement l'enregistreur, et je peux utiliser l'enregistreur dans mes autres modules qui importent common.

Cependant, dans le module dbfuncs, je j'obtiens l'erreur/l'avertissement suivant :

Aucun gestionnaire n'a pu être trouvé pour l'enregistreur "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