«TypeError: '>' не поддерживается между экземплярами 'datetime.datetime' и 'str'» - PullRequest
1 голос
/ 02 августа 2020

Я пытаюсь получить список мест для показа, а затем подсчитываю количество предстоящих шоу. У меня ошибка filtered_upcomingshows = [show for show in upcomingshows if show.start_time > current_time]. В модели поле start_time установлено как DateTime, а current_time установлено как DateTime (если я не понимаю, как оно используется?). Я не могу понять, какой из них читается как строка. Как бы это исправить?

    class Show(db.Model):
  __tablename__ = 'shows'

      id = db.Column(db.Integer, primary_key=True)
      artist_id = db.Column(db.Integer, db.ForeignKey('artists.id'), nullable = False)
      venue_id = db.Column(db.Integer, db.ForeignKey('venues.id'), nullable = False)
      start_time = db.Column(db.DateTime, nullable = False)
    
      def __repr__(self):
        return '<Show {} {}>'.format(self.artist_id, self.venue_id)
   


    @app.route('/venues')
    def venues():
    
      current_time = datetime.now().strftime('%Y-%m-%d %H:%S:%M')
      venue_city_state = ''
    
      data = []
      # queries Venue db for all records
      venues = Venue.query.all()
    
      for venue in venues:
        upcomingshows = venue.shows
    
        filtered_upcomingshows = [show for show in upcomingshows if show.start_time > current_time]
    
        if venue_city_state == venue.city + venue.state:
          data[len(data) - 1]["venues"].append({
            "id": venue.id, 
            "name": venue.name,
            "num_upcoming_shows": len(filtered_upcomingshows)
          })
        else:
          venue_city_state == venue.city + venue.state
          data.append({
            "city": venue.city, 
            "state": venue.state, 
            "venues": [{
              "id": venue.id, 
              "name": venue.name, 
              "num_upcoming_shows": len(filtered_upcomingshows)
            }]
          })

Ответы [ 2 ]

3 голосов
/ 02 августа 2020

Проблема в том (как говорит интерпретатор), что current_time - это строка, а show.start_time - это datetime.datetime экземпляр. Чтобы решить эту проблему, вы можете просто отбросить вызов .strftime('%Y-%m-%d %H:%S:%M') при определении current_time.

date.strftime(format)

Вернуть строку, представляющую дату, управляемую строкой явного формата . Коды формата, относящиеся к часам, минутам или секундам, будут иметь 0 значений. Полный список директив форматирования см. В strftime() и strptime() Поведение.

Ссылка: https://docs.python.org/3/library/datetime.html#datetime .date.strftime

1 голос
/ 02 августа 2020
current_time = datetime.now().strftime('%Y-%m-%d %H:%S:%M')

.strftime задокументирован для возврата строки , просто отклоните вызов, и он будет работать:

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