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 ff.
people = session.query (Person) .all ()
La table person ne contient pas de données (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 lance ensuite à nouveau le script. J'ai été surpris qu'aucune exception n'ait été levée lors de la tentative d'accès à une table qui n'existe pas.
J'ai donc les 2 questions suivantes:
Si cela aide, j'utilise PostgreSQL comme db
[Modifier]
J'écris un paquet. Dans mon __main__.py
script, 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)
[Modifier2]
le module commun configure correctement l'enregistreur et je peux utiliser l'enregistreur dans mes autres modules qui importent en commun.
Cependant, dans le module dbfuncs, j'obtiens l'erreur/l'avertissement suivant:
Aucun gestionnaire n'a été trouvé pour l'enregistreur "sqlalchemy.engine.base.Engine
En plus du paramètre echo
de create_engine()
, il existe un moyen plus flexible: configurer logging
pour faire écho aux instructions du moteur:
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
Voir Configuration de la journalisation section de la documentation pour plus d'informations.
Vous pouvez voir les instructions SQL envoyées à la base de données en passant echo = True lorsque l'instance de moteur est créée (généralement en utilisant l'appel create_engine () ou engine_from_config () dans votre code).
Par exemple:
engine = sqlalchemy.create_engine('postgres://foo/bar', echo=True)
Par défaut, les instructions enregistrées vont à stdout.