Jul*_*nay 4 python sqlalchemy pyramid
如何使用add()更新数据库中的行?
这是我试过的代码:
@view_config(route_name='doc_user_edit', renderer='doc/edit.mako')
def doc_user_edit(request):
""" Edit a documentation page. """
message = ""
try:
page = DBSession.query(Page).filter_by(title=request.matchdict['pagename']).first()
except DBAPIError:
return Response('An error occured while trying to contact the database', content_type='text/plain', status_int=500)
if page is None:
return HTTPNotFound('No such page')
if 'form.submitted' in request.params:
page = Page(request.params['title'], request.params['content'], datetime.now())
DBSession.add(page)
DBSession.commit()
message = _('Page edited')
return {'p':page,
'm':message,
'save_url': request.route_url('doc_user_edit', pagename=page.title),
}
Run Code Online (Sandbox Code Playgroud)
注意:DBSession是一个scoped_session.
如果该行是全新的(即不存在唯一键"title"),则它会正确地添加一个新行,其中包含我传递给它的值.
但如果该行是现有的,它只是......没有.我希望用新值更新行(即从表单中提取的值).我怎样才能做到这一点?
您根本不需要使用add()(只有新对象才需要).只需修改现有page对象然后提交即可.
if 'form.submitted' in request.params:
page.title = request.params['title']
page.content = request.params['content']
page.no_idea_what = datetime.now()
DBSession.commit()
Run Code Online (Sandbox Code Playgroud)
顺便说一下,除非有充分理由使用本地时间,否则最好以UTC格式存储时间戳.
根据您网站的工作方式,您可能希望将逻辑组合起来进行编辑和创建.基本上看起来像这样:
def do_edit_whatever(obj):
# Populate the fields here
if obj.id is None:
db.session.add(obj)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
然后,您的视图函数将使用新数据Page()或已在数据库中的函数调用该函数.
| 归档时间: |
|
| 查看次数: |
1802 次 |
| 最近记录: |