我正在尝试执行检查以查看记录是否在插入记录之前首先存在,以便我不会遇到错误。如果存在,我将更新一个字段。
mydb(mydb.myitems.itemNumber==int(row)).update(oldImageName=fileName) or
mydb.myitems.insert(itemNumber=int(row),oldImageName=fileName)
如果我试图更新不存在的记录,则它应该抛出1个或其他内容。但是,在上面的情况下,它始终抛出0,因此插入不断发生。
为什么?
谢谢!
更新:添加模型:
mydb.define_table('myitems',
Field('itemNumber', 'id',notnull=True,unique=True),
Field('oldImageName', 'string')
如果我尝试更新不存在的记录,那么它应该抛出1或1的东西。
如果您尝试更新确实存在不存在的记录,则.update()
将返回None
,因此插入将发生。如果存在匹配记录,则.update()
将返回更新的记录数量。
无论如何,您应该做:
mydb.myitems.update_or_insert(mydb.myitems.itemNumber == int(row),
oldImageName=filename)
或替代:
mydb.myitems.update_or_insert(dict(itemNumber == int(row)),
oldImageName=filename)
update_or_insert
的第一个参数是_key
,它可以是DAL查询或字段名称为键的字典。
这基本上是对安东尼答案的校正,当我尝试时,它并没有给出所需的结果。如果您这样做:
mydb.myitems.update_or_insert(mydb.myitems.itemNumber == int(row),
itemNumber = int(row),
oldImageName=filename)
然后,如果已经没有该号码的项目,则代码应使用ItemNumber和FileName插入记录,否则将其更新。
如果您错过了itemNumber = int(row),则web2py构成了一个可能不是想要的itemnumber。
在