Python Peewee-如何批量更新以及如何仅更新已编辑的行?

Python Peewee-如何批量更新以及如何仅更新已编辑的行?,python,bottle,peewee,batch-updates,Python,Bottle,Peewee,Batch Updates,我正在尝试通过制作一个用于书籍的笔记应用程序来学习Peewee和瓶子 模型和关系由主题-

我正在尝试通过制作一个用于书籍的笔记应用程序来学习Peewee和瓶子

模型和关系由
主题-
组成

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>
这是不好的,原因有三:

1) 它不进行批量更新,而是一次更新一个注释。如何在Peewee中执行批处理更新

2) 它会更新每个注释,甚至是用户未编辑的注释。如何确定哪些行已被编辑并仅更新这些行


除了使用JQuery(或者使用它的程度非常有限),我应该如何着手解决这些问题呢?

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


Peewee具有功能,要执行批量更新,您可以创建一个
更新
查询。如果要批处理大量更新或插入,则只需使用
with db.atomic()
上下文管理器将它们包装到事务中即可。@coleifer:sql样式的addBatch()与Python/Peewee方法“with db.atomic()”之间是否有任何有意义的区别?我不想传播虚假信息。我不确定什么是sql风格的“addBatch()”,所以我真的不能说。
@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)