Я пытаюсь выполнить сравнение в запросе массового обновления 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