Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Базы данных
  • » Не получается написать запрос на sqlalchemy с фильтром по количеству покупок [RSS Feed]

#1 Апрель 16, 2015 18:59:51

Radist_101
Зарегистрирован: 2013-07-15
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается написать запрос на sqlalchemy с фильтром по количеству покупок

Здравствуйте, есть три таблицы User, Place, Sales:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
class Place(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    sales = db.relationship('Sales', backref='place', lazy='dynamic')
    def regular_clients(self, time_start, time_end):
        pass
class Sales(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    place_id = db.Column(db.Integer, db.ForeignKey('place.id'))    
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    buyer = db.relationship("User", foreign_keys=[user_id])
    timestamp = db.Column(db.DateTime(timezone=False),default=datetime.utcnow)
    sum = db.Column(db.Integer, nullable=False)
Необходимо посчитать постоянных клиентов на точке Place за определенный промежуток времени, клиент считается “постоянным”, если, например, он сделал 5 покупок за временной промежуток.

В классе Place начал описывать метод:
def regular_clients(self, time_start, time_end):
    query = db.session.query(User).join(Sales.user_id).\
        filter(Sales.place_id == self.id,
               Sales.timestamp >= date_start, Sales.timestamp <= date_end)
Но как добавить фильтр по количеству покупок, помогите плиз, написать запрос.

Офлайн

#2 Апрель 16, 2015 19:32:53

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Не получается написать запрос на sqlalchemy с фильтром по количеству покупок

Смотрите func.count().

Офлайн

#3 Апрель 20, 2015 05:31:19

Radist_101
Зарегистрирован: 2013-07-15
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается написать запрос на sqlalchemy с фильтром по количеству покупок

написал

amount = db.session.query(User).join(Sales.buyer).\
            filter(Sales.place_id == self.id,
                   Sales.timestamp >= time_start,
                   Sales.timestamp <= time_end).\
            group_by(User.id).\
            having(db.func.count(Sales.id) >= 5).count()

Офлайн

#4 Апрель 20, 2015 15:00:01

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Не получается написать запрос на sqlalchemy с фильтром по количеству покупок

having тут лишнее. Можно было просто использовать and_

Офлайн

  • Начало
  • » Базы данных
  • » Не получается написать запрос на sqlalchemy с фильтром по количеству покупок[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version