Я новичок в Python, в настоящее время я работаю над API групп ресторанов.
Проблема в том, что когда я соединяю две таблицы ресторанов и адреса, запрос SQLAlchemy отправляет мне 2 кортежа, однако я хотел бы объединить его кортежи
мои два класса: ресторан и адрес
class Restaurants(db.Model):
__tablename__ = 'restaurants'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
description = db.Column(db.String(255))
creation = db.Column(db.DateTime)
opening = db.Column(db.DateTime)
closing = db.Column(db.DateTime)
url = db.Column(db.String(255))
rank = db.Column(db.Integer)
adresse = db.relationship('Adresse', uselist=False, backref='adresse')
class Adresse(db.Model):
__tablename__ = 'adresse'
id = db.Column(db.Integer, primary_key=True)
city= db.Column(db.String(255))
postal_code = db.Column(db.String(255))
street = db.Column(db.String(255))
restaurant_id = db.Column(db.Integer, ForeignKey('restaurants.id'))
long = db.Column(db.Float)
lat = db.Column(db.Float)enter code here
Файл restaurant.py
fields = {
'id': fields.Integer,
'name': fields.String,
'city': fields.String,
'street': fields.String,
'postal code': fields.String(attribute='postal_code'),
'description': fields.String,
'opening time': fields.String(attribute='opening'),
'closing time': fields.String(attribute='closing'),
'picture': fields.String(attribute='url'),
'rank': fields.Integer
}
Тест 01:
@marshal_with(fields)
def get(self)
resto = session.query(Restaurants).join(Adresse, Restaurants.id == Adresse.restaurant_id).all()
return resto, 201
результат:
{
"id": 1,
"name": "Hugiz",
"city": null,
"address": null,
"postal code": null,
"description": "Fastfood",
"opening time": "9:00",
"closing time": "18:00",
"picture": null,
"rank": 4
}
Тест 02:
@marshal_with(fields)
def get(self)
resto = session.query(Restaurants, Adresse).filter(Restaurants.id == Adresse.restaurant_id).all()
return resto, 201
Результат:
[
{
"id": 1,
"name": "Hugiz",
"city": null,
"address": null,
"postal code": null,
"description": "Fastfood",
"opening time": "9:00",
"closing time": "18:00",
"picture": null,
"rank": 4
},
{
"id": 1,
"name": null,
"city": "Paris",
"address": "1-3 Rue de Savies",
"postal code": "75020",
"description": null,
"opening time": null,
"closing time": null,
"picture": null,
"rank": 0
}
]
тест 3:
@marshal_with(champs_restaurant)
def get(self):
resto = session.query(Restaurants).outerjoin(Adresse)
for restaurant in resto:
resto.id = restaurant.id
resto.name = restaurant.name
resto.city = restaurant.adresse.city
resto.street = restaurant.adresse.street
resto.postal_code = restaurant.adresse.postal_code
resto.description = restaurant.description
resto.opening = restaurant.opening
resto.closing = restaurant.closing
resto.url = restaurant.url
resto.rank = restaurant.rank
return resto, 201
результат:
{
"id": 2,
"name": "hugiz",
"city": "Paris",
"address": "1-3 rue de Savies",
"postal code": "75020",
"description": "Fastfood",
"opening time": "9:00",
"closing time": "18:00",
"picture": null,
"rank": 4
}
Этот результат хорош, но он занимает только последний ресторан.
Однако я хотел бы иметь .all () в конце моего запроса
В заключение мне просто понравится запрос, который объединяет мой тест 02, чтобы не иметь двух объектов