SQLAlchemy и неоднозначное имя столбца

#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 не учитывает регистр при сопоставлении таблиц.