sqlalchemy一个表AttributeError中带有筛选器的多个嵌套查询:“tuple”对象没有属性“filter”

2024-06-13 10:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张桌子

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

我已经看了this问题,不知道是否应该设置我的课程 与懒惰的关系类似

我的查询将有九个子查询,如示例所示,参数 是“pid”和“月”,过滤器是国家/地区列表

我需要帮助才能使第一个查询正常工作,以便添加其余的!!!? 问候 保罗


Tags: oridamazondbstringcolumnintegersale