此SQL Alchemy 0.9.7代码执行时没有错误 - 但不按预期更新底层数据库。
这是python:
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炼金术错误或者我遗失了什么?
答案 0 :(得分: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
如果这对您没有意义,请参阅教程中的Executing。但是,我猜你知道这一点,这只是我们所做的那些愚蠢的错误之一,而且所有人都有足够的时间在其他人的代码中看到,而且我们自己的情况差了100倍。 :)