在gae后台判断数据是否存在 实体的ID DateTime时区的问题

本文介绍了在Google App Engine(gae)后台判断数据存在性时遇到的问题,特别是在处理email查询和实体ID比较时的注意事项。作者强调了不能直接在循环中进行email比较,而应将数据存入列表后进行判断。同时,文章提到了gae中DateTimeProperty存储为UTC时区,需要通过调整时区来确保正确的时间处理。解决方案是创建一个辅助类来转换时间,并在保存DateTime属性时使用转换后的时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在自己的网站上添加了个评论的功能,因为要手记发表评论者的email跟名字,就涉及到了数据判断的问题,如果email已经在数据库里就不保存,否则就保存,

 

                client=Client()

 client.name=self.request.get('name')

       client.email=self.request.get('email')

                 email=client.email

                 client.date =self.request.get('date')

 

 query = db.GqlQuery("SELECT * FROM Client") 将所有客户数据取出

 s=[]

 for i in query:

      s.append(i.email)

if email in s: 这里就是判断

  pass

else:

  client.put()

而不能直接这样判断:

        query = db.GqlQuery("SELECT * FROM Client") 

for i in query:

if email==i.email:  这里明显是错误的,因为他在循环的时候是验证每一次的i.email的,所以就不准确

pass

else:

client.put()

 

 

还有个问题就是在后台判断实体的ID:

 

 

def get(self,id):

 

infoId = int(id)

info = Info.get_by_id(infoId)

 

if info.category.key().id()==3001 or info.category.key().id()==2:

    value=1

else:

    value=0

 

 

这里的判断:info.category.key().id()==3001,而不是像django里的info.category.key.id==3001!

 

 

 

最后我还有个错误,因为总是命名不规范,我先把程序上传到gae,后来就把不规范的class名字改了,结果就全错了,所以注意::

 

     如果在本地跑没事,但是上传到gae的程序的类model

 

 

gae的db.DateTimeProperty()默认的是日期时间值作为 UTC 时区存储

所以就要改!

  先写一个类:

class JuxinUtils(object):

def cntime(self):

return datetime.datetime.utcnow() + datetime.timedelta(hours=+8)

然后在保存日期的时候这样保存

 

                juxinUtils = JuxinUtils()

                ms.date = juxinUtils.cntime()

                ms.put()

就是在UTC时区加八个小时就是北京时间!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值