pyramid transaction.manager不更新对象

时间:2013-12-30 12:26:59

标签: python-3.x transactions sqlalchemy pyramid

如何使用Pyramid中的transaction.manager更新数据库中的行?这就是我所拥有的:

DBSession:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))

查看:

def create_update(request, post):
  title = request.POST.get('title', None)
  content = request.POST.get('content', None)

  post.title = title
  post.content = content

  with transaction.manager:
    if post.id is None:
        DBSession.add(post)
    transaction.commit()

这是我从DB获得现有帖子的方式:

def by_slug(slug):
  return DBSession.query(BlogPost).filter(BlogPost.slug == slug).first()

其中BlogPost是sqlalchemy模型。

当我创建一个新帖子时,一切都很好,它被添加并保存在DB中,但是,当我编辑现有帖子时没有任何反应。我试过DBSession.flush(),结果是一样的 - 我可以创建一个新帖子,但现有的帖子不会更新。我错过了什么?

2 个答案:

答案 0 :(得分:1)

为什么在这里使用交易?
ZopeTransactionExtension上的DBSession与您项目中活动的pyramid_tm一起处理所有提交。

所以试试这个:

def create_update(request, post):
  title = request.POST.get('title', None)
  content = request.POST.get('content', None)

  post.title = title
  post.content = content

  if post.id is None:
      DBSession.add(post)

答案 1 :(得分:0)

显然,问题是pyramid_tm配置pyramid.includesini [app:main] use = egg:myproject pyramid.includes = pyramid_jinja2 pyramid_tm #this was missing

{{1}}

很奇怪,我没有看到任何错误或其他任何错误,但它有点令人头疼。