SQLAlchemy: TypeError с использованием оператора сравнения в обновлении - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь выполнить сравнение в запросе массового обновления SQLAlchemy.Арифметические операторы работают, но сравнение приводит к неопределенной ошибке TypeError.Надеемся, что приведенный ниже базовый пример подчеркивает эту проблему.

class Student(Base):
    __tablename__ = "students"
    id = Column(Integer, primary_key=True)
    score = Column(Integer, nullable=True)
    is_passing = Column(Boolean, nullable=True)

def is_passing(score, passing_score):
    if score >= passing_score:
        return True
    else:
        return False

def main():
    s = Session(engine)
    query = s.query(Student)  
    query.update(
            {
                "is_passing": is_passing(Student.score, 65.0)
            },
            synchronize_session=False,
       )

Если я запускаю запрос, формируя список обновленных значений, я могу выполнить то, что мне нужно, но это не объясняет ошибку.

updated_mappings = [{"id": row.id, "is_passing": is_passing(row.score, 65.0)}
                    for row in query]
s.bulk_update_mappings(Student, updated_mappings)

Результирующее сообщение об ошибке:

<ipython-input-4-4914ec21fc1f> in is_passing(score, passing_score)
     41 
     42 def is_passing(score, passing_score):
---> 43     if score >= passing_score:
     44         return True
     45     else:    
~/Envs/pandas/lib/python3.6/site-packages/sqlalchemy/sql/elements.py in __bool__(self)
   2991             return self.operator(hash(self._orig[0]), hash(self._orig[1]))
   2992         else:
-> 2993             raise TypeError("Boolean value of this clause is not defined")
   2994 
   2995     __nonzero__ = __bool__

TypeError: Boolean value of this clause is not defined
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...