Sqlalchemy добавляет ненужные столбцы в запрос при добавлении таблицы внешнего ключа - PullRequest
0 голосов
/ 14 марта 2011

В запросе Sqlalchemy вы можете выбрать определенные строки следующим образом:

q = session.query(Equipment.name)

, который будет возвращать один столбец для каждой строки.Вы можете добавить больше дескрипторов столбцов из модели.Значение len(q.column_descriptions) в этом случае равно единице.

Однако, как только вы добавляете столбец, который является внешним ключом, вы внезапно получаете все столбцы таблицы, хотя я и не просилих.

q = dbsession.query(models.Equipment.name, models.Equipment.model)

Это должно быть два столбца, но теперь len(q.column_descriptions) равно 15 (для этой таблицы это все они плюс дополнительный).

Запрос (q.statement)в конечном итоге выглядит так:

SELECT public.equipment.name, public.equipment.id, public.equipment.model_id, public.equipment.serno, public.equipment.location_id, public.equipment.sublocation, public.equipment.addeddate, public.equipment.comments, public.equipment.language_id, public.equipment.owner_id, public.equipment.vendor_id, public.equipment.account_id, public.equipment.parent_id, public.equipment.active 
FROM public.equipment

Я думаю, что это ошибка в Sqlalchemy, но, возможно, я делаю что-то не так, и кто-то здесь может знать, что это такое.

1 Ответ

3 голосов
/ 14 марта 2011

«имя» - это столбец.«Модель» не является - это отношения () (на основе наблюдаемого поведения выше).Текущее значение по умолчанию __clause_element__() для отношений - полная таблица, поэтому все столбцы выплевываются.Как вы отметили в билете № 1328, это связано, но есть предложение, что вы получите ответ ('name', SomeModelObject), поэтому там также нет столбца с внешним ключом.Разница между «внешним ключом» и «отношением» отличается в SQLAlchemy, в отличие от других инструментов ORM, которые могут скрывать факт существования столбцов «внешнего ключа».

Чтобы запросить только столбец FK, выхотите сказать запрос (Equipment.name, Equipment.model_id) или любое другое имя столбца внешнего ключа, который ссылается на «модель».Если вы используете Elixir, вам, возможно, придется покопаться в их документах, чтобы узнать, какое имя они используют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...