微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – Sqlalchemy – 使用过滤器更新行会产生列表索引错误

我希望这是我关于这个宠物项目的最后一个问题.

我正在尝试使用当前时间更新表Clocktimes(column = time_out).我想通过UUID4创建的UUID进行选择.当我运行代码时,我在query.py(sqlalchemy的一部分)中的函数上得到ListIndex超出范围错误.我在代码下面列出了相当短的函数.

我的代码

out = session.query(). \
        filter(Clocktime.p_uuid == p_uuid). \
        update(Clocktime.time_out == datetime.datetime.Now())
    session.add(out)
    session.commit()

sqlalchemy代码抛出错误

def _entity_zero(self):
    return self._entities[0]

sqlalchemy代码非常复杂,所以我还没看过,但我的理论是它不喜欢我的过滤器出于某种原因.无论如何,我无法弄明白 – 你们有什么想法吗?

解决方法:

我不认为你的代码正在做你想做的事情.
有两种方法可以进行所需的更新:

1)直接在数据库上:

upd = (session.query(Clocktime)
       .filter(Clocktime.p_uuid == p_uuid)
       .update({"time_out": datetime.datetime.Now()})
       )
print("# of updated rows = {}".format(upd))
# session.commit()

2)加载对象,更新值,并提交会话

upd = (session.query(Clocktime)
       .filter(Clocktime.p_uuid == p_uuid)
       )

# assuming there should be exactly one object for given p_uuid    
clockTime = upd.one()
clockTime.time_out = datetime.datetime.Now()
session.commit()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐