Ich habe eine ORM-Klasse namens Person, die eine Personentabelle umschließt:
Nachdem ich die Verbindung zur Datenbank usw. eingerichtet habe, führe ich die Anweisung aus:
people = session.query(Person).all()
Die Personentabelle enthält (noch) keine Daten, also wenn ich drucke die Variable people
, erhalte ich eine leere Liste.
Ich habe die Tabelle, auf die in meiner ORM-Klasse verwiesen wird, People
in people_foo umbenannt. code> (der nicht existiert).
Ich führe dann das Skript erneut aus. Ich war überrascht, dass beim Versuch, auf eine nicht vorhandene Tabelle zuzugreifen, keine Ausnahme ausgelöst wurde.
Ich habe daher die folgenden 2 Fragen:
- Wie kann ich SQLAlchemy so einrichten dass es DB-Fehler zurück an das Skript weiterleitet?
- Wie kann ich die SQL anzeigen (dh drucken), die an die DB-Engine gesendet wird?
Falls es hilft, ich verwende PostgreSQL.
[Bearbeiten]
Ich schreibe ein Paket. In meinem __main__.py
-Skript habe ich den folgenden Code (hier gekürzt):
### __main__.py import common # importiert die Protokollierung und definiert Protokollierungs-Setup-Funktionen 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. wenn nicht gesetzt, erfolgt keine Protokollierung" ) parser.add_option( " --level", dest="loglevel", metavar="LOG LEVEL", help="Debug-Level. Wenn nicht gesetzt, wird Level standardmäßig auf niedrig gesetzt" ) # Standardwerte setzen, wenn nicht angegeben, wenn nicht options.loglevel: loglevel = 1 sonst: loglevel = options.loglevel wenn nicht options.logfile: logfilename = "datafeed.log" sonst: logfilename = options.logfile common.setup_logger(False, logfilename, loglevel) # und so weiter ... #### dbfuncs. py Import-Protokollierung # nicht sicher, wie man sich an den Logger in __main__.py „binding“ anmeldet tLevel(logging.INFO) engine = create_engine("postgres://postgres:[email protected]:port/dbname", echo=True)
[Edit2]
Common-Modul richtet den Logger korrekt ein und ich kann den Logger in meinen anderen Modulen verwenden, die Common importieren.
Aber im dbfuncs
-Modul habe ich erhalte folgende Fehlermeldung/Warnung:
konnten keine Handler gefunden werdenFür den Logger "sqlalchemy.engine.base.Engine