Ich habe eine ORM-Klasse namens Person, die sich um eine Person Tisch hüllt:Debugging (Anzeige) SQL-Befehl an die DB von SQLAlchemy gesendet
Nach der Verbindung zum db usw. einrichten, ich die ff-Anweisung ausführen.
Menschen = session.query (Person) .Alle()
Die Person Tabelle keine Daten enthält (noch), so dass, wenn ich die Variable Menschen zu drucken, ich eine leere Liste erhalten.
Ich benannte die Tabelle in meiner ORM-Klasse People umbenannt, um people_foo (die nicht existiert).
Ich dann das Skript erneut ausführen. Ich war überrascht, dass beim Versuch, auf eine nicht existierende Tabelle zuzugreifen, keine Ausnahme ausgelöst wurde.
Ich hat daher die folgenden zwei Fragen:
- Wie kann ich ein Setup SQLAlchemy, so dass es db Fehler zurück an das Skript ausbreitet?
- Wie kann ich sehen (dh Druck), um die SQL, die an die DB-Engine gesendet wird
Wenn es hilft, ich bin mit PostgreSQL als db
[Bearbeiten]
Ich schreibe ein Paket. In meinem __main__.py
Skript habe ich den folgenden Code (hier gekürzt):
### __main__.py
import common # imports logging and defines logging setup funcs 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. 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:[email protected]:port/dbname', echo=True)
[Edit2]
gemeinsames Modul setzt den Logger richtig dargestellt wird, und ich kann den Logger in meinem anderen Module verwenden, die Import allgemein.
jedoch in dbfuncs Modul, erhalte ich die folgende Fehlermeldung/Warnung:
Keine Handler für Logger „sqlalchemy.engine.base.Engine
Einrückung des Codes ist kaputt, ich sehe keinen 'common.setup_logger()' Aufruf (vorausgesetzt, er konfiguriert die Protokollierung korrekt) hier. Außerdem brauchen Sie bei Verwendung der Protokollierung nicht 'echo = True'. –
@denis: Ja, der Logger ist korrekt im gemeinsamen Modul eingerichtet - ich kann andere Module anmelden. Für das Modul dbfuncs.py. Ich bekomme den Fehler: Keine Handler konnte für Logger gefunden werden "sqlalchemy.engine.base.Engine – morpheous
" Keine Handler konnte für Logger gefunden werden "bedeutet Root Logger hat keine Handler, dh Logger _ist not_ richtig konfiguriert. Wahrscheinlich haben Sie einige konfiguriert Spezifische (nicht root) Logger nur (und so können Sie es verwenden) oder Sie konfiguriert _ _ nach _ es verwendet wird –