SQL炼金术未按预期更新

时间:2014-07-23 22:14:39

标签: python sqlalchemy

此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炼金术错误或者我遗失了什么?

1 个答案:

答案 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倍。 :)