SQL Alchemy未按预期更新
这段 SQL Alchemy 0.9.7 的代码运行没有报错,但却没有像预期那样更新数据库。
下面是代码:
print t #prints TITLE ABSTRACTOR 1
print newtitle #prints TITLE ABSTRACTOR I
print session.query(Basic).filter(Basic.title==t).count() #prints 1
ret = update(Basic).where(Basic.title==t).values(title=newtitle)
session.commit()
这是更新后数据库的样子:
select count(*) from basics where title='TITLE ABSTRACTOR 1';
count
-------
1
(1 row)
select count(*) from basics where title='TITLE ABSTRACTOR I';
count
-------
0
(1 row)
我是不是遇到了 SQL Alchemy 的 bug,还是说我漏掉了什么?
1 个回答
0
你只是构建了一个更新语句:
ret = update(Basic).where(Basic.title==t).values(title=newtitle)
这个语句不会做任何事情,除非你执行它:
stmt = update(Basic).where(Basic.title==t).values(title=newtitle)
ret = conn.execute(stmt)
不过我觉得你是想使用ORM接口,而不是核心接口。在这种情况下,虽然我不记得具体细节,但我很确定你是通过修改一个查询对象来实现的,而不是调用任何名为update
的东西。希望如果这正是你想要的,能有其他人提供更好的答案,类似这样的:
ret = session.query(Basic).filter(Basic.title==t)
ret.title = newtitle
如果这对你来说不太明白,可以看看教程中的执行部分。不过我猜你应该知道这些,这只是我们大家都会犯的那些小错误,看到别人代码里的问题已经够难的了,而在自己代码里就更难了。:)