У меня есть одна таблица,
class Sale(db.Model):
id = db.Column(db.Integer, primary_key=True)
vente_no = db.Column(db.String(50))
lampshade = db.Column(db.String(30))
brocante = db.Column(db.String(30))
buyer = db.Column(db.String(255))
pays = db.Column(db.String(255))
QT = db.Column(db.Integer)
prix_de_vente = db.Column(db.Float)
poste = db.Column(db.Float)
total = db.Column(db.Float)
bordeaux = db.Column(db.Integer)
amazon = db.Column(db.String(255))
bordeaux_euros = db.Column(db.Float)
bordeaux_comm = db.Column(db.Float)
amazon_euros = db.Column(db.Float)
amazon_comm = db.Column(db.Float)
PID = db.Column(db.Integer, db.ForeignKey("period.id"))
date = db.Column(db.Date)
description = db.Column(String(255))
P_id = db.relationship("Period")
def __repr__(self):
return '{}'.format(self.id)
Мне нужно создать один запрос с двумя параметрами и фильтрами, чтобы я мог перебирать строки. Я следую этому уроку вложенных запросов , за которым следую, вот мой подзапрос
poste_eu = db.session.query(
(Sale.id, Sale.poste, Sale.pays).filter(or_(Sale.pays=='United Kingdom', Sale.pays=='France', Sale.pays=='Germany',\
Sale.pays=='The Netherlands', Sale.pays=='Italy', Sale.pays=='Slovakia', Sale.pays=='Ireland',\
Sale.pays=='Malta', Sale.pays=='Belgium', Sale.pays=='Spain')).label('poste_eu')
).group_by(Sale.id.asc()).subquery()
Но в терминале это выдает следующую ошибку
>>> poste_monde = db.session.query(
... (Sale.id, Sale.poste, Sale.pays).filter(~or_(Sale.pays=='United Kingdom',
Sale.pays=='France', Sale.pays=='Germany',\
... Sale.pays=='The Netherlands', Sale.pays=='Italy', Sale.pays=='Slovakia',
Sale.pays=='Ireland',\
... Sale.pays=='Malta', Sale.pays=='Belgium',
Sale.pays=='Spain')).label('poste_monde')
... ).group_by(Sale.id.asc()).subquery()
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: 'tuple' object has no attribute 'filter' ""
этот же запрос написан так:
def poste_monde(pid, month):
p_monde = Sale.query.with_entities(Sale.id, Sale.poste).filter(Sale.PID==pid, extract('month', Sale.date)==month,\
~or_(Sale.pays=='United Kingdom', Sale.pays=='France', Sale.pays=='Germany', Sale.pays=='The Netherlands',\
Sale.pays=='Italy', Sale.pays=='Slovakia', Sale.pays=='Ireland', Sale.pays=='Malta', Sale.pays=='Belgium',\
Sale.pays=='Spain', Sale.pays=='FR', Sale.pays=='GB')).all()
return p_monde
Я посмотрел на этот вопрос и спрашиваю себя, не нужно ли мне настроить мои классы таким же образом с ленивыми отношениями.
в моем запросе будет девять подзапросов, как в приведенном примере, Paremeters - 'pid' и 'month', а фильтры - список стран
Мне нужна помощь, чтобы первый запрос работал так что я могу добавить остальное !!!? С наилучшими пожеланиями Пол