如何使用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()
,结果是一样的 - 我可以创建一个新帖子,但现有的帖子不会更新。我错过了什么?
答案 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.includes
下ini
[app:main]
use = egg:myproject
pyramid.includes =
pyramid_jinja2
pyramid_tm #this was missing
{{1}}
很奇怪,我没有看到任何错误或其他任何错误,但它有点令人头疼。