python - query - SqlAlchemy y Flask, cómo consultar la relación de muchos a muchos
sqlalchemy query (1)
La semántica de la relación no se ve bien. Creo que debería ser algo así como:
class Restaurant(db.Model):
...
dishes = db.relationship(''Dish'', secondary=restaurant_dish,
backref=db.backref(''restaurants''))
Luego, para recuperar todos los platos de un restaurante, puede hacer:
x = Dish.query.filter(Dish.restaurants.any(name=name)).all()
Esto debería generar una consulta como:
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
)
)
Necesito ayuda para crear la consulta SqlAlchemy.
Estoy haciendo un proyecto Flask donde estoy usando SqlAlchemy. Creé 3 tablas: Restaurant, Dish y restaurant_dish en mi archivo 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)
He agregado datos a la tabla restaurant_dish y debería estar funcionando correctamente. Donde necesito ayuda es entender cómo obtener un plato usando el restaurante correctamente. Raw SQL sería algo como esto:
SELECT dish_id FROM restaurant_dish WHERE restaurant_id == id
Lo que he logrado hacer pero no funciona:
x = Restaurant.query.filter_by(Restaurant.restaurant_dish.contains(name)).all()
Gracias por su ayuda y también aprecio los tutoriales que pueden orientarme en la dirección correcta (la documentación oficial pasa por alto).