V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
Weakdancer
V2EX  ›  Google App Engine

关于GQL的使用问题

  •  
  •   Weakdancer · 2010-12-04 22:36:56 +08:00 · 4272 次点击
    这是一个创建于 5102 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天刚看了GAE database ,对GQL的使用很困惑


    <script src="https://gist.github.com/728218.js"> </script>


    NowDay,NoTime,NowWeek,都是整型.


    现在我想实现代码中的那句查询用GQL该怎么写?

    这样写肯定不对:

    db.GqlQuery("SELECT * FROM time WHERE KCB.time[0] =NowDay AND KCB.time[-1] =NowTime AND NowWeek IN KCb.week ORDER BY date DESC LIMIT 1000")

    应该怎么写呢?望指教.
    3 条回复    1970-01-01 08:00:00 +08:00
    Weakdancer
        1
    Weakdancer  
    OP
       2010-12-04 22:38:44 +08:00
    Weakdancer
        2
    Weakdancer  
    OP
       2010-12-04 22:40:22 +08:00
    keakon
        3
    keakon  
       2010-12-05 01:43:49 +08:00
    楼主的表述真的很难懂…

    没猜错的话,你是要把if NowDay==KCB.time[0] and NowTime==KCB.time[-1] and NowWeek in KCB.week改成GQL查询条件吧

    简单来说就是不行,因为datastore不支持复杂的查询,只能将一个属性作为一个整体来查询,不能查询time[-1]这种

    因此你只能这样:
    KCBs = db.GqlQuery("SELECT * FROM kcb WHERE week = :1 ORDER BY date DESC LIMIT 1000", NowWeek)
    for KCB in KCBs:
    if NowDay==KCB.time[0] and NowTime==KCB.time[-1]:
    #...

    week是一个ListProperty,查询的时候直接用=就行了,IN的语义不是你理解的这样的

    最后提醒一下,不是有特殊需求的话不要用GQL,因为查询较复杂时,构造非常不方便,而且性能很差。所有GqlQuery对象都能用等价且更方便高效的Query代替。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:19 · PVG 03:19 · LAX 11:19 · JFK 14:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.