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

标签 python sqlite sqlalchemy

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

我正在尝试用当前时间更新表 Clocktimes(列 = 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) 加载对象、更新值并提交 session

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()

关于python - Sqlalchemy - 使用过滤器更新行会产生列表索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29810183/

相关文章:

python - 我应该将 len(list) 存储在某个地方吗?

android - 在 onCreate() 函数中添加行

python - 内存高效的内置 SqlAlchemy 迭代器/生成器?

Python SQLAlchemy 关系设置事件钩子(Hook)

python - 如何在 SQLAlchemy 中使用 PostgreSQL 的 jsonb_to_record?

python - Julia 与 Python 中的位打包性能

python - 用 Python 实现了广度优先搜索算法。不知道如何返回解决方案

java - 尝试将 Assets 文件夹中找到的数据库复制到应用程序的数据库文件夹中时遇到的问题

javascript - 如何在 PhoneGap 应用程序中使用 SQLite 数据库?

python - 服务器脱机时如何保持代码在客户端上运行