J'ai une classe ORM appelée Person, qui s'enroule autour d'une table de personne:
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 le moment), donc lorsque j'imprime la variable people, j'obtiens une liste vide.
J'ai renommé la table référencée dans ma classe ORM People, to people_foo(qui n'existe pas).
Je relance ensuite le script. J'ai été surpris qu'aucune exception n'ait été lancée lors de la tentative d'accès à une table qui n'existe pas.
J'ai donc les 2 questions suivantes:
- Comment puis-je configurer SQLAlchemy pour qu'il propage les erreurs de base de données dans le script?
- Comment puis-je afficher (c'est-à-dire imprimer) le SQL qui est envoyé au moteur de base de données?
Si cela aide, j'utilise PostgreSQL.
[Éditer]
J'écris un paquet. Dans mon __main__.pyscript, j'ai le code suivant (raccourci ici):
### __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:pwd@localhost:port/dbname', echo=True)
[Edit2]
Le module commun configure correctement l'enregistreur et je peux utiliser l'enregistreur dans mes autres modules qui importent du commun.
Cependant, dans le dbfuncsmodule, j'obtiens l'erreur / l'avertissement suivant:
Aucun gestionnaire n'a été trouvé pour le journal "sqlalchemy.engine.base.Engine
common.setup_logger()appel (en supposant qu'il configure correctement la journalisation) ici. De plus, vous n'en avez pas besoinecho=Truelorsque vous utilisez la journalisation.