2015-04-22 35 views
2

我希望这是我最后一个有关这个宠物项目的问题。Sqlalchemy - 使用过滤器更新行产生列表索引错误

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

我的代码:

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的代码是非常复杂的,所以我没有通过它看上去还,但我的理论是,它不”不喜欢我的过滤器出于某种原因。无论如何,我无法弄清楚 - 你们有没有任何想法?

回答

2

我不认为你的代码正在做你想做的事情。 有两种方法可以让你想更新:

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)负载对象(S),更新的价值,并提交会议

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() 
相关问题