如何在用户发布问题时更新user.question_count?

时间:2010-09-05 18:34:34

标签: sqlalchemy

我正在使用sqlalchemy。问题很简单,但我有一个很大的问题,因为我想使用MapperExtension。

我有两个类:用户和问题

用户可能有很多问题,并且还包含question_count 记录属于他的问题数。

所以,当我添加一个新问题时,我想要更新的question_count 用户。起初,我这样做:

question = Question(title='aaa', content='bbb') 
Session.add(question) 
Session.flush() 


user = question.user 
### user is not None 
user.question_count += 1 
Session.commit() 

一切顺利。

但是我不想使用事件回调来做同样的事情,所以我使用了sqlalchemy的MapperExtension。我将updating user.question_count的逻辑放在after_insert的{​​{1}}回调中。但我发现我无法更新question,它将被忽略。

我不知道原因。而且,如果您有相同的要求,您如何实施它?

1 个答案:

答案 0 :(得分:1)

在执行映射器扩展之前计算工作单元,因此在第一次提交事务后,对用户对象的更改将保持挂起状态。我建议您不要使用ORM来更新question_count,而是直接执行SQL语句(使用User.__table__.update(...)生成语句)。

还有一个常见的习惯用法以原子方式增加列:table.update(...).values(col=table.c.col+1),它被翻译为UPDATE ... SET col=col+1,而你的代码只是设置了新的值而失去了可能的中间增量。