在我的web2py应用程序中,我需要复制记录及其所有引用。 例如 一个用户有产品(sponserid是用户)。而且这个产品有很多功能存储在其他表中(参考产品ID)。
我的要求是,如果另一个用户正在复制此产品,则会在产品表中生成一条新记录,其中包含新的productid和新的sponserid。并且所有参考表记录也将与新产品ID重复。实际上,在所有表中创建重复条目,只有更改是产品ID和sponserid。
产品表字段将更改。所以我必须写一个动态查询。
如果我可以编写如下代码
product = db(db.tbl_product.id==productid).select(db.tbl_product.ALL).first()
newproduct = db.tbl_product.insert(sponserid=newsponserid)
for field,value in product.iteritems():
if field!='sponserid':
db(db.tbl_product.id==newproduct).update(field=value)
但我不能在更新功能中引用这样的字段名称。
此外,我想知道是否还有其他更好的逻辑来实现这一要求。 我非常感谢任何建议。
答案 0 :(得分:3)
对于在字段名称存储在变量中时使用.update()
方法的特定问题,您可以执行以下操作:
db(db.tbl_product.id==newproduct).update(**{field: value})
但更简单的方法就是这样:
product = db(db.tbl_product.id==productid).select(db.tbl_product.ALL).first()
product.update(sponserid=newsponserid)
db.tbl_product.insert(**db.tbl_product._filter_fields(product))
应用于.update()
对象的Row
方法仅更新Row
对象,而不更新数据库中的原始记录。该表的._filter_fields()
方法采用记录(Row
,Storage
或普通dict
)并返回一个dict,仅包含属于该表的字段(它也是过滤掉id
字段,数据库将自动生成该字段。