Как восстановить только список из двух таблиц SQLAchemy? - PullRequest
0 голосов
/ 13 января 2019

Я новичок в 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, чтобы не иметь двух объектов

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