SqlAlchemy и Flask, как запросить отношения «многие ко многим»

Мне нужна помощь в создании запроса SqlAlchemy.

Я делаю проект Flask, где я использую SqlAlchemy. Я создал 3 таблицы: Restaurant, Dish и restaurant_dish в файле models.py.

restaurant_dish = db.Table('restaurant_dish', db.Column('dish_id', db.Integer, db.ForeignKey('dish.id')), db.Column('restaurant_id', db.Integer, db.ForeignKey('restaurant.id')) ) class Restaurant(db.Model): id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(64), index = True) restaurant_dish = db.relationship('Dish', secondary=restaurant_dish, backref=db.backref('dishes', lazy='dynamic')) class Dish(db.Model): id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(64), index = True) info = db.Column(db.String(256), index = True) 

Я добавил данные в таблицу restaurant_dish и должен работать правильно. Где мне нужна помощь – это понимание того, как правильно получить блюдо с помощью ресторана. Необработанный SQL будет примерно таким:

 SELECT dish_id FROM restaurant_dish WHERE restaurant_id == id 

То, что мне удалось сделать, но не работает:

 x = Restaurant.query.filter_by(Restaurant.restaurant_dish.contains(name)).all() 

Благодарим вас за помощь, и я также ценю учебные пособия, которые могут указывать мне в правильном направлении (официальная документация проходит над моей головой).

  • Настройка Flask-SQLAlchemy для использования нескольких баз данных с Flask-Restless
  • Как получить исходный, скомпилированный SQL-запрос из выражения SQLAlchemy?
  • Когда мне нужно вызвать flush () в SQLAlchemy?
  • AttributeError: объект 'int' не имеет атрибута '_sa_instance_state'
  • конвертировать выбранное время и дату в sqlalchemy
  • Операция Redshift COPY не работает в SQLAlchemy
  • Этот сеанс на основе потока Flask-SQLAchemy вызывает ошибку «сервер MySQL ушел»?
  • Использование DATEADD в sqlalchemy
  • One Solution collect form web for “SqlAlchemy и Flask, как запросить отношения «многие ко многим»”

    Семантика отношений не выглядит правильной. Я думаю, что это должно быть что-то вроде:

     class Restaurant(db.Model): ... dishes = db.relationship('Dish', secondary=restaurant_dish, backref=db.backref('restaurants')) 

    Затем, чтобы получить все блюда для ресторана, вы можете сделать:

     x = Dish.query.filter(Dish.restaurants.any(name=name)).all() 

    Это должно сгенерировать запрос типа:

     SELECT dish.* FROM dish WHERE EXISTS ( SELECT 1 FROM restaurant_dish WHERE dish.id = restaurant_dish.dish_id AND EXISTS ( SELECT 1 FROM restaurant WHERE restaurant_dish.restaurant_id = restaurant.id AND restaurant.name = :name ) ) 
    Interesting Posts

    Как узнать собственные векторы, соответствующие конкретному собственному значению матрицы?

    Является ли numpy.transpose переупорядочиванием данных в памяти?

    Автоматическая загрузка модуля при запуске IPython

    Как объединить два кадра данных на основе ближайшей даты

    Вставка SQLite Python – неправильное количество вставленных привязок

    n-граммов в питоне, четыре, пять, шесть граммов?

    Можно ли построить неявные уравнения с использованием Matplotlib?

    Python PEP8: соглашение о пустых линиях

    Как заставить scipy.interpolate дать экстраполированный результат за пределами диапазона ввода?

    Красивый суп: объект «ResultSet» не имеет атрибута «find_all»?

    Обеспечение связи с мобильным приложением?

    Ошибка при использовании подушки: ImportError: невозможно импортировать имя _imaging

    Python: Как получить значение datetime.today (), которое является «уведомлением о часовом поясе»?

    Блокировка кеша в Django Celery не работает?

    Почему random.shuffle возвращает None?

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