#python #sqlalchemy #ambiguous
#python #sqlalchemy #неоднозначное
Вопрос:
У меня был хороший поиск в Google, но, похоже, я не могу найти ответ на эту ошибку в моем случае.
Я не делаю никаких объединений, я буквально просто пытаюсь получить все из этой таблицы.
Все остальные запросы работают нормально, но, похоже, это связано с этой ошибкой:
InvalidRequestError: Ambiguous column name 'INMPTL_WIW_BATAM_STG.pers_no' in result set! try 'use_labels' option on select statement.
Модель:
batamStg = sa.Table("INMPTL_WIW_BATAM_STG", meta.metadata,
sa.Column("PERS_NO", sa.types.String(),primary_key=True),
sa.Column("FIRST_NAME", sa.types.String()),
sa.Column("LAST_NAME", sa.types.String()),
sa.Column("KNOWN_AS", sa.types.String()),
sa.Column("JOB_TITLE", sa.types.String()),
sa.Column("MANAGER_NAME", sa.types.String()),
sa.Column("MANAGER_ID", sa.types.String()),
sa.Column("MANAGER_COST", sa.types.String()),
autoload=True,
autoload_with=engine)
Вид:
btm = meta.Session.query(model.BatamStaging).all();
Здесь есть только один столбец с именем Pers_no, и все первичные ключи уникальны.
Та же ошибка также возникает, если я пытаюсь установить LAST_NAME в качестве первичного ключа.
У кого-нибудь еще была эта проблема?
Комментарии:
1. Я не знаю, почему он это делает, но вы пробовали то, что он предложил, и использовали «use_labels»?
2. Не являются ли use_labels для операторов select при использовании execute()?
3. Я полагаю, вы также можете включить подробную отладку, чтобы точно видеть, какие SQL-инструкции генерирует SQLAlchemy, что может помочь вам точно выяснить, почему вы получаете это сообщение об ошибке.
Ответ №1:
Моей гипотезой была бы чувствительность к регистру имен столбцов при переопределении столбцов, которые отражаются с помощью autoload=True
. Для проверки закомментируйте все определения столбцов и оставьте autoload=True
. Затем сделайте наоборот.
Для получения дополнительной информации см. раздел Отражение объектов базы данных — переопределение отраженных столбцов документации SA.
Комментарии:
1. Это кажется вероятным случаем, хотя, похоже, я не могу заставить их работать должным образом без автозагрузки. Если мне удастся заставить его работать, я сообщу вам обновление, спасибо
2. Оказывается, вы были правы. Эта таблица отличалась от всех других таблиц в базе данных, поскольку она не соответствовала схеме именования, и хотя SQL Developer показывал имена столбцов с заглавной буквы, они, должно быть, были в нижнем регистре. Я предполагал, что sql developer показал их такими, какими они были на самом деле, и что sqlalchemy не учитывает регистр при сопоставлении таблиц.