0

在我的 web2py 应用程序中,我需要复制一条记录及其所有引用。例如,一个用户有一个产品(sponserid 是用户)。而且这个产品有很多存储在其他表中的特性(参考产品ID)。

我的要求是,如果另一个用户正在复制这个产品,新的记录将在产品表中生成新的 productid 和新的 sponserid。并且所有参考表记录也将与新产品 id 重复。实际上,在所有表中都创建了一个重复条目,唯一的变化是产品 ID 和赞助商 ID。

产品表字段将更改。所以我必须写一个动态查询。

如果我可以编写如下代码

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)

但是我不能在更新函数中引用这样的字段名。

另外我想知道是否有任何其他更好的逻辑来实现这一要求。我将不胜感激任何建议。

4

1 回答 1

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对象,而不是数据库中的原始记录。table的._filter_fields()方法接受一条记录(RowStorage或 plain dict)并返回一个 dict ,其中仅包含属于该表的字段(它还过滤掉该id字段,数据库将自动生成该字段)。

于 2012-09-10T20:53:47.577 回答