4

我正在尝试写入 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)]
4

3 回答 3

6

我希望fus_dfus_s字典实际上有日期,因为你的例子2013-01-01实际上是一个数学表达式,它 evals to 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.7viewkeys直接从 dict 中使用,而不是使用set.

fu_list = [(k, fus_d.get(k), fus_s.get(k)) for k in fus_d.viewkeys() | fus_s]
于 2013-06-10T21:25:08.407 回答
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)
于 2013-06-10T21:29:43.763 回答
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()
于 2013-06-10T21:43:37.753 回答