我需要能够为某些已知实体将数据写入google-app-engine的数据存储区。但是我不希望为实体的每个参数写入赋值代码。我知道,我不想这样做
val_1 = self.request.get('prop_1')
val_2 = self.request.get('prop_2')
...
val_N = self.request.get('prop_N')
item.prop_1 = val_1
item.prop_2 = val_2
...
item.prop_N = val_N
item.put()
相反,我想做这样的事情
args = self.request.arguments()
for prop_name in args:
item.set(prop_name, self.request.get(prop_name))
item.put()
剂量任何人都知道如何做这个伎俩?
this question与我的相似,但似乎这家伙只想读取数据。我需要写!
答案 0 :(得分:0)
您需要使用Expando类。
Expando类是数据模型定义的超类 属性是动态确定的。一个Expando模型可以有一个 固定属性的组合类似于模型和动态 在运行时分配给实体的属性
答案 1 :(得分:0)
您可以使用exec
执行此操作,但我根本不会推荐它。请考虑与此相关的安全问题。例如。用户为您的对象发布新密钥的可能性,从而可能劫持该对象。
如果你必须这样做,exec
方法肯定会帮助你,因为described here(该链接还包含更多可能不是一个好主意的理由)。
自行承担风险。
答案 2 :(得分:0)
我只是尝试给this question一个建议
标准python函数setattr(item, param, value)
适用于db.Model
的成员