web2py检查是否存在于db insert或update中

use*_*229 3 mysql insert web2py

我正在尝试执行检查,以便在插入记录之前查看记录是否存在,这样我就不会收到错误.如果它存在,我将更新一个字段.

mydb(mydb.myitems.itemNumber==int(row)).update(oldImageName=fileName) or 
mydb.myitems.insert(itemNumber=int(row),oldImageName=fileName)
Run Code Online (Sandbox Code Playgroud)

如果我尝试更新不存在的记录,那么它应该抛出1或者除了0之外的东西.但是在上面的情况下,它总是抛出0,所以插入不断发生.

这是为什么?

谢谢!

更新:添加模型:

mydb.define_table('myitems', 
                    Field('itemNumber', 'id',notnull=True,unique=True),
                    Field('oldImageName', 'string')
Run Code Online (Sandbox Code Playgroud)

Ant*_*ony 7

如果我尝试更新不存在的记录,那么它应该从0开始抛出1或者其他东西.

如果您尝试更新存在的记录,.update()将返回None,因此插入将发生.如果存在匹配记录,.update()则返回更新的记录数.

无论如何,你应该做:

mydb.myitems.update_or_insert(mydb.myitems.itemNumber == int(row),
                              oldImageName=filename)
Run Code Online (Sandbox Code Playgroud)

或者:

mydb.myitems.update_or_insert(dict(itemNumber == int(row)),
                              oldImageName=filename)
Run Code Online (Sandbox Code Playgroud)

update_or_insertis 的第一个参数_key,可以是DAL查询,也可以是字段名称为键的字典.