У меня есть класс ORM с именем Person, который охватывает таблицу пользователей:
После настройки подключения к базе данных и т. д. я запускаю оператор:
people = session.query(Person).all()
Таблица person не содержит данных (пока), поэтому, когда я печатаю переменную people
, я получаю пустой список.
Я переименовал таблицу, на которую ссылается мой класс ORM People
, в people_foo
(которого не существует).
Затем я снова запускаю скрипт. Я был удивлен, что при попытке доступа к несуществующей таблице не возникло никаких исключений.
Поэтому у меня есть следующие 2 вопроса:
- Как мне настроить SQLAlchemy так, чтобы что он передает ошибки базы данных обратно в сценарий?
- Как я могу просмотреть (т.е. распечатать) SQL, отправляемый механизму базы данных?
Если это поможет, я использую PostgreSQL.
[Изменить]
Я пишу пакет. В моем скрипте __main__.py
у меня есть следующий код (здесь он сокращен):
### __main__.py import common # импортирует ведение журнала и определяет функции настройки ведения журнала 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. если не установлено, ведение журнала не будет" ) parser.add_option( " --level", dest="loglevel", metavar="LOG LEVEL", help="Уровень отладки. если не задан, уровень по умолчанию будет низким" ) # Установить значения по умолчанию, если не указано, если не options.loglevel: loglevel = 1 else: loglevel = options.loglevel если не options.logfile: logfilename = "datafeed.log" else: logfilename = options.logfile common.setup_logger(False, logfilename, loglevel) # и так далее ... #### dbfuncs. py import logging # не знаю, как "привязать" к регистратору в __main__.py logging.getLogger("sqlalchemy.engine").se tLevel(logging.INFO) engine = create_engine("postgres://postgres:[email protected]:port/dbname", echo=True)
[Edit2]
Модуль Common правильно настраивает регистратор, и я могу использовать регистратор в других своих модулях, которые импортируют common.
Однако в модуле dbfuncs
я получаю следующую ошибку/предупреждение:
Не удалось найти обработчиков для регистратора "sqlalchemy.engine.base.Engine