如何通过动态参数名称写入数据

时间:2011-11-25 17:34:06

标签: python google-app-engine

我需要能够为某些已知实体将数据写入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与我的相似,但似乎这家伙只想读取数据。我需要写!

3 个答案:

答案 0 :(得分:0)

您需要使用Expando类。

  

Expando类是数据模型定义的超类   属性是动态确定的。一个Expando模型可以有一个   固定属性的组合类似于模型和动态   在运行时分配给实体的属性

答案 1 :(得分:0)

您可以使用exec执行此操作,但我根本不会推荐它。请考虑与此相关的安全问题。例如。用户为您的对象发布新密钥的可能性,从而可能劫持该对象。

如果你必须这样做,exec方法肯定会帮助你,因为described here(该链接还包含更多可能不是一个好主意的理由)。

自行承担风险。

答案 2 :(得分:0)

我只是尝试给this question一个建议 标准python函数setattr(item, param, value)适用于db.Model的成员