【发布时间】:2021-12-24 11:37:16
【问题描述】:
我正在尝试在PlayerAt 表中创建一个方法,以根据使用timedelta 的过滤器从PlayerOc 表中选择记录。这是精简的课程:
class PlayerAt(Base):
id_ = sa.Column(sa.Integer, primary_key=True)
birth_date = sa.Column(sa.Date, index=True)
def return_player_oc_records(self):
session = sa.orm.object_session(self)
qry = session.query(PlayerOc)
qry = qry.outerjoin(PlayerAt)
qry = qry.filter(PlayerOc.birth_date >= self.birth_date - dt.timedelta(weeks=4))
recs = qry.all()
return recs
但是,当我执行该方法时,我得到了错误:
TypeError: unsupported operand type(s) for -: 'NoneType' and 'datetime.timedelta'
这是因为某些PlayerAt 记录没有birth_date。
我尝试将过滤器转换为:
qry = qry.filter(PlayerOc.birth_date >= sa.func.IF(self.birth_date != None, self.birth_date - dt.timedelta(weeks=4), None))
但是,我得到了同样的错误。
关于修复的任何想法?
【问题讨论】:
标签: python mysql sqlalchemy