? ? pyDAL在使用过程中,所有对表和表中数据的增删改操作,必须写一句:db.commit(),才能提交到数据库生效;
(1)表操作
define_table、drop、truncate
(2)数据操作
insert、update、delete、update_record、update_or_insert
例如,增加一条数据,这样才是完整的:
db.person.insert(name="Alex",dept='finance',id='001')
db.commit()
如果我们每条数据增删改的指令都db.commit(),效能会变低,考虑到并发,稳妥的做法是每次都commit,但也不能 一味求稳?我们需要灵活掌握:
例如我们在做?循环或批量 增改数据,我们确定 每个增改 不立即生效 也不会发生并发问题 或者 每个增改结果 不必立即引用,那可以 循环和批量结束 db.commit() 一次,这样能减少开销,
例如:我们插入3条数据
names=['sarah','david','smith']
ids=['003','004','005']
for i in range(0, len(names)): :
??? db.person.insert(name=names[i],dept='finance',id=ids[i])
db.commit()
? ?显然如果我们 用的是“update_or_insert”必须每次都commit,因为我们的增改结果需要马上引用,所以要实时更新,不然就不准确了:
for i in range(0, len(names)): :
??? db.person.update_or_insert(db.person.id.belongs(ids),name=names[i],dept='finance',id=ids[i])
??? db.commit()
? ?因为web2py框架会根据事务完成情况,自动执行commit和rollback(如果有异常),手册原话是:
? ? ? in models, views and controllers there is no need to ever call?commit?or?rollback explicitly in web2py unless you need more granular control. However, in modules you will need to use?commit()