我正在尝试写入GAE数据存储区中的模型,该模型将包含三个字段:日期,整数,整数。
class fusSent(db.Model):
""" Models a list of the follow-ups due and follow-ups sent """
date_created = db.DateTimeProperty(auto_now_add=True)
fu_date = db.DateProperty()
fus_due = db.IntegerProperty()
fus_sent = db.IntegerProperty()
此数据来自两个具有匹配键(日期)的不同词典。见下文。
fus_d = {2013-01-01: 1, 2013-04-01: 1, 2013-02-01: 1, 2013-03-01: 1}
fus_s = {2013-01-01: 0, 2013-04-01: 0, 2013-02-01: 1, 2013-03-01: 1}
我的猜测是我需要将字典组合成一个列表(如下所示),以便将其保存到数据存储区。但是,我不完全确定这是最好的方法。
fu_list = [(2013-01-01, 1, 0), (2013-04-01, 1, 0), (2013-02-01, 1, 1), (2013-03-01, 1, 1)]
答案 0 :(得分:6)
我希望fus_d
和fus_s
词典实际上有日期,因为2013-01-01
的例子实际上是一个数学表达式,它可以逃避2011
。但以下应该有效
s = set(fus_d.keys())
s.update(fus_s.keys())
fu_list = [(k, fus_d.get(k), fus_s.get(k)) for k in s]
编辑:同样使用python 2.7,您可以直接使用dict中的viewkeys
而不是使用set
。
fu_list = [(k, fus_d.get(k), fus_s.get(k)) for k in fus_d.viewkeys() | fus_s]
答案 1 :(得分:2)
改善@cmd答案。
为了写入数据库,您应该构建一个模型实例列表并调用db.put
将它们保存到数据库中,如下所示:
fus_d = {'2013-01-01': 1, '2013-04-01': 1, '2013-02-01': 1, '2013-03-01': 1}
fus_s = {'2013-01-01': 0, '2013-04-01': 0, '2013-02-01': 1, '2013-03-01': 1}
s = set(fus_d.keys())
s.update(fus_s.keys())
fu_list = [fusSent(fu_date=k, fus_due=fus_d.get(k, 0), fus_sent=fus_s.get(k, 0)) for k in s]
db.put(fu_list)
答案 2 :(得分:1)
@cmd具有生成您请求的列表的代码,但不会将其放入数据存储区。此代码将创建实体并保存它们:
s = set(fus_d.keys())
s.update(fus_s.keys())
for k in s:
sent = fusSent(fu_date=k, fus_due=fus_d.get(k), fus_sent=fus_s.get(k))
sent.put()