Sqlalchemy присоединиться к одному из многих отношений?

Я пытаюсь сделать простой запрос соединения, как это,

SELECT food._id, food.food_name, food_categories.food_categories FROM food JOIN food_categories ON food.food_category_id = food_categories._id 

но продолжать получать ошибку. Вот как мои классы настроены.

 class Food_Categories(db.Model): __tablename__ = 'food_categories' _id = db.Column(db.Integer, primary_key=True) food_categories = db.Column(db.String(30)) class Food(db.Model): __tablename__ = 'food' _id = db.Column(db.Integer, primary_key=True) food_name = db.Column(db.String(40)) food_category_id = db.Column(db.Integer, ForeignKey(Food_Categories._id)) food_category = relationship("Food_Categories") 

Моя функция запроса выглядит так.

 @app.route('/foodlist') def foodlist(): if request.method == 'GET': results = Food.query.join(Food_Categories.food_categories).all() json_results = [] for result in results: d = {'_id': result._id, 'food': result.food_name, 'food_category': result.food_categories} json_results.append(d) return jsonify(user=json_results) 

Я использую Flask. Когда я вызываю маршрут, я получаю эту ошибку.

 AttributeError: 'ColumnProperty' object has no attribute 'mapper' 

Я действительно хочу этого:

 | id | food_name | food_category | 

и замените столбец food_category_id фактическим названием категории продуктов, находящейся в другой таблице.

Правильно ли настроены мои таблицы / отношения? Правильно ли настроен мой запрос?

One Solution collect form web for “Sqlalchemy присоединиться к одному из многих отношений?”

Ваши таблицы и отношения настроены правильно. Ваш запрос нуждается в изменении.

Причиной ошибки является тот факт, что вы пытаетесь выполнить соединение в столбце ( Food_Categories.food_categories ) вместо таблицы (или отображаемого объекта модели). Технически вы должны заменить свой запрос ниже, чтобы исправить ошибку:

 results = Food.query.join(Food_Categories).all() 

Это исправит ошибку, но не будет генерировать SQL запрос, который вы желаете, потому что он вернет экземпляры Food только в результате, хотя есть соединение.

Чтобы создать запрос, который будет генерировать именно инструкцию SQL вы имеете в виду:

 results = (db.session.query(Food._id, Food.food_name, Food_Categories.food_categories,) .join(Food_Categories)).all() for x in results: # print(x) print(x._id, x.food_name, x.food_categories) 

Обратите внимание, что в этом случае результаты не являются экземплярами Food , а скорее tuples с 3 значениями столбца.

  • sqlalchemy, превращая список идентификаторов в список объектов
  • SQLAlchemy introspect тип столбца с наследованием
  • Как получить исходный, скомпилированный SQL-запрос из выражения SQLAlchemy?
  • Как добавить автоматический фильтр к отношению с SQLAlchemy?
  • Установка значения по умолчанию в sqlalchemy
  • Когда мне нужно вызвать flush () в SQLAlchemy?
  • Соединение UniqueConstraint с функцией
  • Преобразование SQL в SQL-алхиму
  •  
    Interesting Posts for Van-Lav

    Проверить создание класса в OrientDB

    Как удалить escape-последовательности ANSI из строки в python

    Расширенное понимание списка Python

    Python: для цикла – печать в одной строке

    Как я могу получить имя скрипта, вызывающего функцию в python?

    Лучший способ запуска удаленных команд через ssh в Twisted?

    zc.lockfile.LockError в ZODB

    matplotlib: Понимание и изменение меток оси для графика рассеяния, обновляемого постепенно

    Python, PyTables, Java – связывание всех

    Python – PyQt – QTable Widget – добавление строк

    ошибка памяти при разбиении большого файла на более мелкие файлы в python

    Pandas sort_index дает странный результат после применения функции для группировки DataFrame

    Как я могу удалить / исключить символы из __future__ после их импорта?

    Как запрашивать из базы данных по возрасту в Django, когда день рождения хранится в виде полей year / month / day

    SMTP отправил почту многим получателям, но не получил ее

    Python - лучший язык программирования в мире.