SQL Alchemy未按预期更新

0 投票
1 回答
2557 浏览
提问于 2025-04-18 14:31

这段 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

如果这对你来说不太明白,可以看看教程中的执行部分。不过我猜你应该知道这些,这只是我们大家都会犯的那些小错误,看到别人代码里的问题已经够难的了,而在自己代码里就更难了。:)

撰写回答