如何批量更新和如何仅更新已编辑的行



我正试图通过为书籍制作笔记应用程序来学习Peewee和Bottle。

模型和关系由Subject -< Book -< Chapter -< Note组成。

note.tpl页面上,我希望在一个表格中显示所有笔记,并允许最终用户根据自己的意愿更新任何笔记:

<FORM action="/notes" method="POST">
    <input type="hidden" name="chapter_id" value="{{chapter.id}}"
    <% note_ids = ""
       for note in chapter.notes:
           note_ids += note.id
       end
       note_ids = note_ids[:-1]
    %>
    <input type="hidden" name="note_ids" value="{{note_ids}}" />
    <TABLE>
        <TR><TD>Note Meta</TD><TD>Note</TD></TR>
        % for note in chapter.notes:
            <TR><TD>
                Tag:<input type="text" value="note_tag#{{note.id}}" /><br />
                Pg#:<input type="text" value="page_number#{{note.id}}" /><br />
                </TD>
                <TD> <textarea name="note#{{note.id}}" /><br />
            </TR>
        % end
    </TABLE>
</FORM>

假设我有一个这样的控制器:

@app.route('/notes/, method='POST')
def note_action():
    for i in request.forms.get('note_ids').split(','):
        note = Note(tag=request.forms.get('note_tag#' + i),
        page_number=request.forms.get('page_number#' + i),
        chapter=request.forms.get('chapter_id'))
        note.save()
    chapter = Chapter.select().where(Chapter.id==chapter_id)
    return template('notes', chapter=chapter)

这是不好的三个原因:

1)它不做批量更新,而是一次更新每个音符。我如何在Peewee中进行批量更新?

2)它更新每一个笔记,甚至没有被用户编辑的笔记。如何才能确定哪些行已被编辑,并仅更新这些行?

没有使用JQuery(或在非常有限的程度上使用它),我应该如何解决这些问题?

关于你的第一个问题,迟来总比不来好:Peewee API没有像JDBC的java.sql.Statement那样的addBatch()方法。相反,你通过"with"开始一个事务,并做很多工作,由Python处理事务的提交。Peewee作者的这篇文章说明了这种方法(不幸的是,文章末尾关于批量加载数据的链接被破坏了):

https://groups.google.com/forum/!味精/peewee-orm/YWamQxAYxWU/HTu_wUNLHKUJ

相关内容

  • 没有找到相关文章

最新更新